Changeset 8366 for branches/ORCHIDEE_2_2


Ignore:
Timestamp:
2024-01-08T15:25:30+01:00 (6 months ago)
Author:
yann.meurdesoif
Message:

Update irrigation for native routing

  • fix problem due to an uninitialized array that must be set to 0 for Pedro irrigation

YM

Location:
branches/ORCHIDEE_2_2/ORCHIDEE/src_sechiba
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/ORCHIDEE_2_2/ORCHIDEE/src_sechiba/routing_native.f90

    r8227 r8366  
    457457       CALL routing_flow_set(coastalflow_mean=coastalflow) 
    458458       
    459        CALL irrigation_main( dt_routing, reinfiltration, irrigated_next, irrig_frac, root_deficit, soiltile, & 
     459       CALL irrigation_main( dt_routing, contfrac, reinfiltration, irrigated_next, irrig_frac, root_deficit, soiltile, & 
    460460                             fraction_aeirrig_sw ) 
    461461        
  • branches/ORCHIDEE_2_2/ORCHIDEE/src_sechiba/routing_native_irrig.f90

    r8227 r8366  
    219219   
    220220 
    221   SUBROUTINE irrigation_main(dt_routing, reinfiltration, irrigated_next, irrig_frac, root_deficit, soiltile, & 
     221  SUBROUTINE irrigation_main(dt_routing, contfrac, reinfiltration, irrigated_next, irrig_frac, root_deficit, soiltile, & 
    222222                             fraction_aeirrig_sw ) 
    223223  USE constantes 
     
    227227  IMPLICIT NONE  
    228228    REAL(r_std), INTENT(IN)       :: dt_routing                
     229    REAL(r_std), INTENT(IN)       :: contfrac(nbpt)                
    229230    REAL(r_std), INTENT(IN)       :: reinfiltration(nbpt)                
    230231    REAL(r_std), INTENT(IN)       :: irrigated_next(nbpt)            
     
    242243    
    243244      IF (old_irrig_scheme) THEN 
    244         CALL irrigation_compute_requested_old(reinfiltration, irrigated, irrig_needs_r) 
     245        CALL irrigation_compute_requested_old(contfrac, reinfiltration, irrigated, irrig_needs_r) 
    245246        CALL irrigation_old(irrig_needs_r, irrig_actual_r) 
    246247      ELSE 
    247         CALL irrigation_compute_requested_new(dt_routing, root_deficit, soiltile, irrig_frac, irrig_needs_r) 
    248         CALL irrigation_new(fraction_aeirrig_sw, irrig_needs_r, irrig_actual_r) 
     248        CALL irrigation_compute_requested_new(dt_routing, contfrac, root_deficit, soiltile, irrig_frac, irrig_needs_r) 
     249        CALL irrigation_new(contfrac,fraction_aeirrig_sw, irrig_needs_r, irrig_actual_r) 
    249250      ENDIF 
    250251       
     
    254255      ENDIF 
    255256      CALL scatter_omp(irrig_actual,irrigation_mean) 
    256       irrigation_mean(:)=irrigation_mean(:)/area(:) 
     257      irrigation_mean(:)=irrigation_mean(:)/(area(:)*contfrac(:)) 
    257258      CALL irrigation_mean_reset() 
    258259    ELSE 
     
    266267 
    267268 
    268   SUBROUTINE irrigation_new(fraction_aeirrig_sw, irrig_needs_r, irrig_actual_r) 
     269  SUBROUTINE irrigation_new(contfrac, fraction_aeirrig_sw, irrig_needs_r, irrig_actual_r) 
    269270  USE constantes 
    270271  USE routing_native_flow_mod, ONLY : routing_mask_r, routing_flow_get, routing_flow_set  
     
    272273  USE xios 
    273274  IMPLICIT NONE 
    274   
    275     REAL(r_std),INTENT(IN)        :: fraction_aeirrig_sw(nbpt)           !! Total irrigation requirement (water requirements by the crop for its optimal growth) (kg) 
     275    REAL(r_std),INTENT(IN)        :: contfrac(nbpt)            
     276    REAL(r_std),INTENT(IN)        :: fraction_aeirrig_sw(nbpt)            
    276277    REAL(r_std),INTENT(IN)        :: irrig_needs_r(nbpt_r)               !! Total irrigation requirement (water requirements by the crop for its optimal growth) (kg) 
    277278    REAL(r_std),INTENT(OUT)       :: irrig_actual_r(nbpt_r)             !! Possible irrigation according to the water availability in the reservoirs (kg) 
     
    300301 
    301302    CALL gather_omp(fraction_aeirrig_sw, fraction_aeirrig_sw_mpi) 
     303    !! fraction moyenne => need contfrac ?? 
    302304       
    303305    IF (is_omp_root) THEN 
    304  
     306       
    305307      CALL xios_send_field("fraction_aeirrig_sw", fraction_aeirrig_sw_mpi) 
    306       CALL xios_recv_field("fraction_aeirrig_sw_r", fraction_aeirrig_sw_r) ! ==> need conservative quantity interp 
     308      CALL xios_recv_field("fraction_aeirrig_sw_r", fraction_aeirrig_sw_r) ! ==> need conservative quantity interp => no flux => to check !!! 
    307309 
    308310 
     
    454456 
    455457          ENDIF 
    456  
     458        ELSE 
     459          irrig_actual_r(ig) = 0 
    457460        ENDIF 
    458461      ENDDO 
     
    559562     
    560563  
    561   SUBROUTINE irrigation_compute_requested_new(dt_routing, root_deficit, soiltile, irrig_frac, irrig_netereq_r) 
     564  SUBROUTINE irrigation_compute_requested_new(dt_routing, contfrac, root_deficit, soiltile, irrig_frac, irrig_netereq_r) 
    562565  USE constantes 
    563566  USE constantes_soil 
     
    567570  IMPLICIT NONE 
    568571    REAL(r_std),INTENT(IN)   :: dt_routing           
     572    REAL(r_std),INTENT(IN)   :: contfrac(nbpt)           
    569573    REAL(r_std),INTENT(IN)   :: root_deficit(nbpt)                
    570574    REAL(r_std),INTENT(IN)   :: soiltile(nbpt,nstm)  !! Fraction of each soil tile within vegtot (0-1, unitless) 
     
    574578    REAL(r_std)              :: irrig_netereq(nbpt) 
    575579    REAL(r_std)              :: irrig_netereq_mpi(nbp_mpi) 
    576     REAL(r_std)              :: area_mpi(nbp_mpi) 
    577  
     580    
    578581    INTEGER  :: ig 
    579582    
     
    604607    ENDDO 
    605608 
    606     CALL gather_omp(irrig_netereq, irrig_netereq_mpi) 
    607     CALL gather_omp(area, area_mpi) 
    608        
     609    CALL gather_omp(irrig_netereq*area*contfrac, irrig_netereq_mpi) 
     610           
    609611    IF (is_omp_root) THEN 
    610       CALL xios_send_field("irrig_netereq",irrig_netereq_mpi*area_mpi) !! contfrac ? 
     612      CALL xios_send_field("irrig_netereq",irrig_netereq_mpi) !! contfrac => ok ? 
    611613      CALL xios_recv_field("irrig_netereq_r",irrig_netereq_r) ! ==> need conservative quantity interp 
    612614    ENDIF 
     
    615617   
    616618  
    617   SUBROUTINE irrigation_compute_requested_old(reinfiltration, irrigated, irrig_need_r) 
     619  SUBROUTINE irrigation_compute_requested_old(contfrac, reinfiltration, irrigated, irrig_need_r) 
    618620  USE constantes 
    619621  USE xios 
     
    621623  USE grid, ONLY : area 
    622624  IMPLICIT NONE 
     625    REAL(r_std),INTENT(IN)   :: contfrac(nbpt)           
    623626    REAL(r_std),INTENT(IN)   :: reinfiltration(nbpt)                
    624627    REAL(r_std),INTENT(IN)   :: irrigated(nbpt)                
     
    627630    REAL(r_std)              :: irrig_netereq(nbpt) 
    628631    REAL(r_std)              :: irrig_netereq_mpi(nbp_mpi) 
    629     REAL(r_std)              :: area_mpi(nbp_mpi) 
    630  
     632    
    631633    INTEGER  :: ig, ir 
    632634   
     
    641643      ENDDO 
    642644     
    643       CALL gather_omp(irrig_netereq, irrig_netereq_mpi) 
    644       CALL gather_omp(area, area_mpi) 
    645  
     645      CALL gather_omp(irrig_netereq*area*contfrac, irrig_netereq_mpi) 
     646      
    646647      IF (is_omp_root) THEN 
    647         CALL xios_send_field("irrig_netereq",irrig_netereq_mpi*area_mpi) ! contfrac ?? 
     648        CALL xios_send_field("irrig_netereq",irrig_netereq_mpi) ! contfrac ?? 
    648649        CALL xios_recv_field("irrig_netereq_r",irrig_need_r) ! ==> need conservative quantity interp 
    649650      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.