Save new quantity for restart

Questions and remarks about code_saturne usage
Forum rules
Please read the forum usage recommendations before posting.
Post Reply
Boone11
Posts: 20
Joined: Fri Jan 13, 2023 10:47 am

Save new quantity for restart

Post by Boone11 »

Hi all,

I have created a new variable ("r") that is used in a home made model. I would like to store it at the end of a computation to use it to initialise a restart.

For the already existing quantities there is no issue. For instance for the streamwise velocity, in the cs_user_initialisation.f90 I use:

Code: Select all

hyb_ux(iel)   = cvar_vel(1,iel)
But for my new quantity "r" I do not know how to do. I cannot not compute it from existing quantities at the last iteration of the previous run. May you help me?

Thanks a lot!
Yvan Fournier
Posts: 4080
Joined: Mon Feb 20, 2012 3:25 pm

Re: Save new quantity for restart

Post by Yvan Fournier »

Hello,

I wanted to add a field keyword to determine if a field should be saved in a checkpoint, but cant't find a trace of this, so I guess it is still on my TODO/wish list...

Otherwise, you can use the cs_restart_write_section function, but you need to do this on an open restart file, and there is not user-defined function call at the appropriate call site.

So the easiest solution is probably to create your own additional restart file, using a

cs_restart_create...
cs_restart_write_section__
cs_restart_destroy

Sequence (I'll let you check the actual arguments in the code sources or on-line documentation).

Best regards,

Yvan
Boone11
Posts: 20
Joined: Fri Jan 13, 2023 10:47 am

Re: Save new quantity for restart

Post by Boone11 »

Hi Yvan and thanks for your answer.

Practically, I should create a file named cs_restart.c, then write in it:

Code: Select all

/* Creation of the restart file */
cs_restart_create(const char * my_quantity1_file, const char *  save_additional_quantities_directory,  	cs_restart_mode_t write)

/* Declaration of the used subroutines */
void cs_restart_write_section(cs_restart_t *  	restart, const char *  sec_name,	int  location_id, int n_location_vals,
		cs_restart_val_type_t  val_type, const void *  val ) 	
void cs_restart_destroy ( cs_restart_t **  restart) 	

/* Main program */
/* Suppose 3 quantities to be stored */
cs_restart_write_section(restart1, sec_name, location_id, n_location_vals, CS_TYPE_cs_real_t, my_quantity1)
cs_restart_write_section(restart2, sec_name, location_id, n_location_vals, CS_TYPE_cs_real_t, my_quantity2)
cs_restart_write_section(restart3, sec_name, location_id, n_location_vals, CS_TYPE_cs_real_t, my_quantity3)

cs_restart_destroy ( cs_restart_t **  restart1) 
cs_restart_destroy ( cs_restart_t **  restart2) 
cs_restart_destroy ( cs_restart_t **  restart3) 
Does it seems correct to you?
Could you explain in more detail what 'section name', 'id of corresponding location', and 'number of values per location (interlaced)' refer to for the cs_restart_write_section subroutine?

Is there an example of user restart that I can use?

Thanks again!
Post Reply