Changes between Version 1 and Version 2 of ticket/0848

2011-07-18T16:52:39+02:00 (9 years ago)


  • ticket/0848

    v1 v2  
    1 [[PageOutline]] 
    2 Last edited [[Timestamp]] 
     1[[PageOutline]] Last edited [[Timestamp]] 
    4 [[BR]] 
    6 '''Author''' : rblod (rachid)  
     3'''Author''' : rblod (rachid) 
    85'''ticket''' : #848 
    10 '''Branch''' : [      dev_r2802_LOCEAN10_agrif_lim ]  
    11 ---- 
    13 === Description === 
     7'''Branch''' : [ dev_r2802_LOCEAN10_agrif_lim] 
     10=== Description === 
     11 * Target : use agrif with LIM_2 (EVP and VP rheology), implementation for LIM3 should be similar to LIM_2_EVP but is not done on this branch, since LIM3 fiability is still an issue for me 
     12 * Existing work 
     13  * The pioneer was off course F. Dupont some years ago with one-way nesting LIM2_VP, nn_fsbc=1 
     14  * Work at LOCEAN with LIM2_VP, 2 way nesting, nn_fsc /=5 (R. Benshila, C. Herbaud, D. Iovino) 
     15  * LOCEAN/LPO, LIM2_EVP, 2 way nesting, nn_fsc /=5 (R. Benshila, C. Talandier) 
     17 * Preliminary issues (actually several) : 
     18  * main one is the ice-model call frequency which may not be equal to 1. This will prevent AGRIF to handle correctly the temporal interpolation 
     19  * defining state variables to be interpolated for sea-ice model. Obvious for sea-ice velocities, not so for ice properties 
     20  * dealing with B grid with VP 
     21  * dealing an iterative solver for VP rheology 
     22  * dealing with a sub-time stepping in EVP rheology. We have to put something at the boundaries at each sub-time step.  
     24 * Solving above issues  
     25  * except for EVP, there is no temporal interpolation performed for sea-ice fields boundary conditions. Between 2 calls to the mother ice-model, we put the ''next''   value computed by the mother grid at the boundary, even if the child nest calls the ice model several time in between. To do so, we use systematically the optional argument "calledweight=1." in the calls to agrif_bc. 
     26  * so we interpolate ''u_ice'' and ''v_ice''. For sea-ice properties, we choose fileds which are advected (limtrp_2), meaning  ''hsnm, hicm, frld, tbif,qstoif''. The advection scheme being a high order one, the correct solution seems to interpolate content of the previous variables and their moments (42 variables). This is implemented in agrif_sadv_lim2. Thus, the difference isn't striking when interpolating only the properties at the end of limtrp_2 after advection and diffusion  (done in agrif_adv_lim2). In all of this, we assume having correct values after horizontal processes is sufficient since the following processes (thermodynamics) is pure vertical 1D 
     27  * using the B grid is all in the correct definition of u_ice and v_ice location in agrif_user 
     28  * in limrhg_2, we interpolate once for all the values to be put at the boundaries during the matrix inversion (agrif_dyn_lim2_load) and we update it at each iteration (agrif_dyn_lim2_copy) 
     29  * in limrhg, we tried something clever: we store before and next values parent values (work usually done by agrif if nn_fsbc=1) and we perform a temporal interpolation during the time-splitting. Storing "by hand" old and new values and performing a temporal interpolation could actually also be done for ice-properties. 
     31 * Update phase 
     32The same variable are used to update the mother grid. Currently, we need to have nn_fsbc = nbcline_update to have this working properly. I suspect some inconsistency in the stress computation otherwise, but didn't solve it properly 
     34 * Modified modules: 
     35  *  OPA_SRC/nemogcm.F90 : add a call to Agrif_Declare_Var_lim2 for initialisation on the mother grid 
     36  *  OPA_SRC/SBC/sbcice_lim_2.F90 : initialisation for child grid and update, also add childfreq which is the child ice sub-timstep and used for hand-made temporal interpolation 
     37  *  LIM_SRC_2/limhdf_2.F90 : stupid modifications for wrk_nemo 
     38  *  LIM_SRC_2/limadv_2.F90 : stupid modifications for wrk_nemo 
     39  *  LIM_SRC_2/iceini_2.F90   : correction of bug #849 
     40  *  LIM_SRC_2/limtrp_2.F90  : add call to agrif_sadv_lim2 to interpolate the moments and to agrif_adv_lim2 to interpolate the variables. Note the second call could be enough. I also put à_order moments as global variables to be able to interpolate it. 
     41  *  LIM_SRC_2/ice_2.F90 : put 0-order moments as module variables and allocate it 
     42  *  LIM_SRC_2/limrhg_2.F90 : add call to agrif_dyn_lim2_load and agrif_dyn_lim2_copy 
     43  *  LIM_SRC_2/limrhg.F90 : add call to agrif_dyn_lim 
     44  *  NST_SRC/agrif_opa_update.F90 : move nbclineupdate to agrif_oce 
     45  *  NST_SRC/agrif_users.F90 : add declaration (agrif_declare_var_lim2) and initialisation (agrif_InitValues_cont_lim2) 
     47 * New routines 
     48  *  NST_SRC/agrif_lim2_interp.F90 
     49  *  NST_SRC/agrif_lim2_interp.F90 
     50  *  NST_SRC/agrif_ice.F90 
    1752=== Testing === 
    1853Testing could consider (where appropriate) other configurations in addition to NVTK].