Changeset 257 for branches/ORCHIDEE_EXT/ORCHIDEE/src_sechiba/slowproc.f90
- Timestamp:
- 2011-06-17T14:02:17+02:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ORCHIDEE_EXT/ORCHIDEE/src_sechiba/slowproc.f90
r143 r257 2 2 ! Daily update of leaf area index etc. 3 3 ! 4 !! $Header: /home/ssipsl/CVSREP/ORCHIDEE/src_sechiba/slowproc.f90,v 1.48 2010/04/20 14:12:04 ssipsl Exp $ 4 !< $HeadURL: http://forge.ipsl.jussieu.fr/orchidee/svn/trunk/ORCHIDEE/src_sechiba/slowproc.f90 $ 5 !< $Date: 2011-01-01 21:30:44 +0100 (Sat, 01 Jan 2011) $ 6 !< $Author: mmaipsl $ 7 !< $Revision: 45 $ 5 8 !! IPSL (2006) 6 9 !! This software is governed by the CeCILL licence see ORCHIDEE/ORCHIDEE_CeCILL.LIC … … 54 57 LOGICAL, SAVE :: old_lai = .FALSE. ! Old Lai Map interpolation 55 58 LOGICAL, SAVE :: impveg = .FALSE. 59 LOGICAL, SAVE :: impsoilt = .FALSE. 56 60 LOGICAL, SAVE :: old_veget = .FALSE. ! Old veget Map interpolation 57 61 ! … … 143 147 LOGICAL, PARAMETER :: check = .FALSE. 144 148 145 REAL(r_std), SAVE :: sec_old = 0.149 REAL(r_std), SAVE :: sec_old = zero 146 150 ! 147 151 ! do initialisation … … 299 303 ! Test each day and assert all slow processes (days and years) 300 304 ! 301 IF ( sec_old >= one_day - dtradia .AND. sec >= 0.) THEN305 IF ( sec_old >= one_day - dtradia .AND. sec >= zero ) THEN 302 306 ! 303 307 ! reset counter … … 510 514 LOGICAL, PARAMETER :: check = .FALSE. 511 515 ! 512 ! DS 15032011 add for replacing SUM(veget_max(ji,nvm-1:nvm 516 ! DS 15032011 add for replacing SUM(veget_max(ji,nvm-1:nvm)) 513 517 REAL(r_std) :: sum_veget_max 514 !515 516 518 517 519 ! … … 582 584 !Config only done once a day. 583 585 ! 584 CALL setvar_p (day_counter, val_exp, 'SECHIBA_DAY', 0.0_r_std)586 CALL setvar_p (day_counter, val_exp, 'SECHIBA_DAY', zero) 585 587 ! 586 588 !Config Key = LAI_MAP … … 733 735 CALL restget_p (rest_id, var_name, nbp_glo, nvm, 12, kjit, .TRUE., laimap) 734 736 ! 737 ELSE 738 ! 739 ALLOCATE (laimap(1,1,1)) 735 740 ENDIF 736 741 ! … … 806 811 !Config Key = DT_SLOW 807 812 !Config Desc = Time step of STOMATE and other slow processes 808 !Config Def = 86400.813 !Config Def = one_day 809 814 !Config Help = Time step (s) of regular update of vegetation 810 815 !Config cover, LAI etc. This is also the time step … … 905 910 CALL setvar_p (lai, val_exp, 'SECHIBA_LAI', llaimax) 906 911 907 908 !Config Key = SOIL_FRACTIONS909 !Config Desc = Fraction of the 3 soil types (0-dim mode)910 !Config Def = 0.28, 0.52, 0.20912 ! 913 !Config Key = IMPOSE_SOILT 914 !Config Desc = Should the soil typ be prescribed 915 !Config Def = n 911 916 !Config If = IMPOSE_VEG 912 !Config Help = Determines the fraction for the 3 soil types 913 !Config in the mesh in the following order : sand loam and clay. 914 ! 915 CALL setvar_p (soiltype, val_exp, 'SOIL_FRACTIONS', soiltype_default) 916 917 918 !Config Key = CLAY_FRACTION 919 !Config Desc = Fraction of the clay fraction (0-dim mode) 920 !Config Def = 0.2 921 !Config If = IMPOSE_VEG 922 !Config Help = Determines the fraction of clay in the grid box. 923 ! 924 CALL setvar_p (clayfraction, val_exp, 'CLAY_FRACTION', clayfraction_default) 925 917 !Config Help = This flag allows the user to impose a soil type distribution. 918 !Config It is espacially interesting for 0D 919 !Config simulations. On the globe it does not make too much sense as 920 !Config it imposes the same soil everywhere 921 ! 922 impsoilt = .FALSE. 923 CALL getin_p('IMPOSE_SOILT', impsoilt) 924 IF (impsoilt) THEN 925 !Config Key = SOIL_FRACTIONS 926 !Config Desc = Fraction of the 3 soil types (0-dim mode) 927 !Config Def = 0.28, 0.52, 0.20 928 !Config If = IMPOSE_VEG 929 !Config If = IMPOSE_SOILT 930 !Config Help = Determines the fraction for the 3 soil types 931 !Config in the mesh in the following order : sand loam and clay. 932 ! 933 CALL setvar_p (soiltype, val_exp, 'SOIL_FRACTIONS', soiltype_default) 934 935 !Config Key = CLAY_FRACTION 936 !Config Desc = Fraction of the clay fraction (0-dim mode) 937 !Config Def = 0.2 938 !Config If = IMPOSE_VEG 939 !Config If = IMPOSE_SOILT 940 !Config Help = Determines the fraction of clay in the grid box. 941 ! 942 CALL setvar_p (clayfraction, val_exp, 'CLAY_FRACTION', clayfraction_default) 943 ELSE 944 IF ( MINVAL(soiltype) .EQ. MAXVAL(soiltype) .AND. MAXVAL(soiltype) .EQ. val_exp .OR.& 945 & MINVAL(clayfraction) .EQ. MAXVAL(clayfraction) .AND. MAXVAL(clayfraction) .EQ. val_exp) THEN 946 947 CALL slowproc_soilt(kjpindex, lalo, neighbours, resolution, contfrac, soiltype, clayfraction) 948 ENDIF 949 ENDIF 926 950 ! 927 951 !Config Key = SLOWPROC_HEIGHT … … 1005 1029 ! If restart doesn't contain veget, then it is the first computation 1006 1030 CALL slowproc_update(kjpindex, lalo, neighbours, resolution, contfrac, & 1007 & veget_max, frac_nobio, veget_max, frac_nobio, veget_year, init=.TRUE.)1031 & veget_nextyear, frac_nobio_nextyear, veget_max, frac_nobio, veget_year, init=.TRUE.) 1008 1032 ! 1009 1033 IF ( control%ok_dgvm ) THEN … … 1172 1196 ! 1173 1197 CASE('MAXR') 1174 pref_soil_veg(:,1) = pref_soil_veg_sand 1175 pref_soil_veg(:,2) = pref_soil_veg_loan 1176 pref_soil_veg(:,3) = pref_soil_veg_clay 1198 pref_soil_veg(:,1) = pref_soil_veg_sand(:) 1199 pref_soil_veg(:,2) = pref_soil_veg_loan(:) 1200 pref_soil_veg(:,3) = pref_soil_veg_clay(:) 1177 1201 ! 1178 1202 ! Current default : equidistribution. … … 1365 1389 ! 1366 1390 1367 IF ( ( tau .LT. dt ) .OR. ( dt .LE. 0. ) .OR. ( tau .LE. 0.) ) THEN1391 IF ( ( tau .LT. dt ) .OR. ( dt .LE. zero ) .OR. ( tau .LE. zero ) ) THEN 1368 1392 WRITE(numout,*) 'slowproc_long: Problem with time steps' 1369 1393 WRITE(numout,*) 'dt=',dt … … 1411 1435 ! 1.1 Sum up 1412 1436 ! 1413 fracsum(:) = 0.1437 fracsum(:) = zero 1414 1438 DO jv = 1, nnobio 1415 1439 DO ji = 1, kjpindex … … 1477 1501 ENDDO 1478 1502 ENDDO 1479 1480 1503 ! 1481 1504 ! 3. if lai of a vegetation type (jv > 1) is small, increase soil part … … 1501 1524 ! Ajout Nouveau calcul (stomate-like) 1502 1525 DO ji = 1, kjpindex 1503 SUMveg = 0.01526 SUMveg = zero 1504 1527 veget(ji,1) = veget_max(ji,1) 1505 1528 DO jv = 2, nvm 1506 veget(ji,jv) = veget_max(ji,jv) * ( 1.- exp( - lai(ji,jv) * ext_coeff(jv) ) )1529 veget(ji,jv) = veget_max(ji,jv) * ( un - exp( - lai(ji,jv) * ext_coeff(jv) ) ) 1507 1530 veget(ji,1) = veget(ji,1) + (veget_max(ji,jv) - veget(ji,jv)) 1508 1531 SUMveg = SUMveg + veget(ji,jv) … … 1515 1538 ENDIF 1516 1539 ENDDO 1517 1518 1540 ! 1519 1541 ! 4. Sum up surface fractions and test if the sum is equal to 1 … … 1523 1545 ! 4.1 Sum up 1524 1546 ! 1525 fracsum(:) = 0.1547 fracsum(:) = zero 1526 1548 DO jv = 1, nnobio 1527 1549 DO ji = 1, kjpindex … … 1599 1621 REAL(r_std), DIMENSION (kjpindex,2), INTENT(in) :: resolution !! size in x an y of the grid (m) 1600 1622 1601 REAL(r_std), DIMENSION( kjpindex,nvm,12), INTENT(in):: laimap !! LAI lue1623 REAL(r_std), DIMENSION(:,:,:), INTENT(in) :: laimap !! LAI lue 1602 1624 LOGICAL, INTENT(in) :: read_lai 1603 1625 ! 0.2 Output … … 1610 1632 ! Test Nathalie. On impose LAI PFT 1 a 0 1611 1633 ! On boucle sur 2,nvm au lieu de 1,nvm 1612 lai(: ,1) = 0.01634 lai(: ,1) = zero 1613 1635 DO jv = 2,nvm 1614 1636 !!$ DO jv = 1,nvm … … 1771 1793 ! 1772 1794 WHERE ( laimaporig(:,:,:) .LT. 0 ) 1773 laimaporig(:,:,:) = 0.1795 laimaporig(:,:,:) = zero 1774 1796 ENDWHERE 1775 1797 ! … … 1831 1853 ilast = 1 1832 1854 n_origlai(:) = 0 1833 laimap(:,:,:) = 0.1855 laimap(:,:,:) = zero 1834 1856 ! 1835 1857 DO ip=1,ijml … … 1943 1965 ! Antartica 1944 1966 DO jv =1,nvm 1945 laimap(ip,jv,:) = 0.1967 laimap(ip,jv,:) = zero 1946 1968 ENDDO 1947 1969 ! … … 1949 1971 ! Artica 1950 1972 DO jv =1,nvm 1951 laimap(ip,jv,:) = 0.1973 laimap(ip,jv,:) = zero 1952 1974 ENDDO 1953 1975 ! … … 1955 1977 ! Greenland 1956 1978 DO jv =1,nvm 1957 laimap(ip,jv,:) = 0.1979 laimap(ip,jv,:) = zero 1958 1980 ENDDO 1959 1981 ! … … 2590 2612 DO ib = 1, nbpt 2591 2613 idi=1 2592 sumf= 0.2614 sumf=zero 2593 2615 DO WHILE ( sub_area(ib,idi) > zero ) 2594 2616 ip = sub_index(ib,idi,1) … … 2622 2644 IF (PRESENT(init)) THEN 2623 2645 IF (init) THEN 2624 ! veget_next(ib,:) = (/ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0. /) 2625 veget_next(ib,1) = 1. 2646 veget_next(ib,1) = un 2626 2647 veget_next(ib,2:nvm) = zero 2627 2648 ELSE … … 2658 2679 ! 2659 2680 idi=1 2660 sumf= 0.2681 sumf=zero 2661 2682 DO WHILE ( sub_area(ib,idi) > zero ) 2662 2683 ip = sub_index(ib,idi,1) … … 2763 2784 err=norm-un 2764 2785 IF (debug) & 2765 WRITE(numout,*) "ib ",ib," SUM(veget_next(ib,:)+frac_nobio_next(ib,:))- 1., sumf",err,sumf2766 IF (abs(err) > -EPSILON( 1._r_std)) THEN2786 WRITE(numout,*) "ib ",ib," SUM(veget_next(ib,:)+frac_nobio_next(ib,:))-un, sumf",err,sumf 2787 IF (abs(err) > -EPSILON(un)) THEN 2767 2788 !MM 1.9.3 2768 2789 ! IF (abs(err) > 0.) THEN … … 2775 2796 err=norm-un 2776 2797 IF (debug) & 2777 WRITE(numout,*) "ib ",ib," SUM(veget_next(ib,:)+frac_nobio_next(ib,:))- 1.",err2778 IF (abs(err) > EPSILON( 1._r_std)) THEN2798 WRITE(numout,*) "ib ",ib," SUM(veget_next(ib,:)+frac_nobio_next(ib,:))-un",err 2799 IF (abs(err) > EPSILON(un)) THEN 2779 2800 !MM 1.9.3 2780 2801 ! IF (abs(err) > 0.) THEN … … 2927 2948 ! 2928 2949 ! 2929 veget(ib,:) = 0.02930 frac_nobio (ib,:) = 0.02950 veget(ib,:) = zero 2951 frac_nobio (ib,:) = zero 2931 2952 ! 2932 2953 ENDDO … … 3063 3084 frac_origveg(:,vid) = REAL(n_origveg(:,vid),r_std) / REAL(n_found(:),r_std) 3064 3085 ELSEWHERE 3065 frac_origveg(:,vid) = 0.3086 frac_origveg(:,vid) = zero 3066 3087 ENDWHERE 3067 3088 ENDDO … … 3099 3120 IF ( lalo(ib,1) .LT. -56.0) THEN 3100 3121 ! Antartica 3101 frac_nobio(ib,:) = 0.03102 frac_nobio(ib,iice) = 1.03103 veget(ib,:) = 0.03122 frac_nobio(ib,:) = zero 3123 frac_nobio(ib,iice) = un 3124 veget(ib,:) = zero 3104 3125 ! 3105 3126 ELSE IF ( lalo(ib,1) .GT. 70.0) THEN 3106 3127 ! Artica 3107 frac_nobio(ib,:) = 0.03108 frac_nobio(ib,iice) = 1.03109 veget(ib,:) = 0.03128 frac_nobio(ib,:) = zero 3129 frac_nobio(ib,iice) = un 3130 veget(ib,:) = zero 3110 3131 ! 3111 3132 ELSE IF ( lalo(ib,1) .GT. 55.0 .AND. lalo(ib,2) .GT. -65.0 .AND. lalo(ib,2) .LT. -20.0) THEN 3112 3133 ! Greenland 3113 frac_nobio(ib,:) = 0.03114 frac_nobio(ib,iice) = 1.03115 veget(ib,:) = 0.03134 frac_nobio(ib,:) = zero 3135 frac_nobio(ib,iice) = un 3136 veget(ib,:) = zero 3116 3137 ! 3117 3138 ELSE … … 3144 3165 DO vid = 1, nvm 3145 3166 IF ( veget(ib,vid) .LT. min_vegfrac ) THEN 3146 veget(ib,vid) = 0.03167 veget(ib,vid) = zero 3147 3168 ENDIF 3148 3169 ENDDO … … 3346 3367 frac_origveg(:,vid) = n_origveg(:,vid) / n_found(:) 3347 3368 ELSEWHERE 3348 frac_origveg(:,vid) = 0.3369 frac_origveg(:,vid) = zero 3349 3370 ENDWHERE 3350 3371 ENDDO … … 3382 3403 IF ( lalo(ib,1) .LT. -56.0) THEN 3383 3404 ! Antartica 3384 frac_nobio(ib,:) = 0.03385 frac_nobio(ib,iice) = 1.03386 veget(ib,:) = 0.03405 frac_nobio(ib,:) = zero 3406 frac_nobio(ib,iice) = un 3407 veget(ib,:) = zero 3387 3408 ! 3388 3409 ELSE IF ( lalo(ib,1) .GT. 70.0) THEN 3389 3410 ! Artica 3390 frac_nobio(ib,:) = 0.03391 frac_nobio(ib,iice) = 1.03392 veget(ib,:) = 0.03411 frac_nobio(ib,:) = zero 3412 frac_nobio(ib,iice) = un 3413 veget(ib,:) = zero 3393 3414 ! 3394 3415 ELSE IF ( lalo(ib,1) .GT. 55.0 .AND. lalo(ib,2) .GT. -65.0 .AND. lalo(ib,2) .LT. -20.0) THEN 3395 3416 ! Greenland 3396 frac_nobio(ib,:) = 0.03397 frac_nobio(ib,iice) = 1.03398 veget(ib,:) = 0.03417 frac_nobio(ib,:) = zero 3418 frac_nobio(ib,iice) = un 3419 veget(ib,:) = zero 3399 3420 ! 3400 3421 ELSE … … 3427 3448 DO vid = 1, nvm 3428 3449 IF ( veget(ib,vid) .LT. min_vegfrac ) THEN 3429 veget(ib,vid) = 0.03450 veget(ib,vid) = zero 3430 3451 ENDIF 3431 3452 ENDDO … … 3554 3575 ! 3555 3576 ! 3556 veget(ib,:) = 0.03557 frac_nobio (ib,:) = 0.03577 veget(ib,:) = zero 3578 frac_nobio (ib,:) = zero 3558 3579 ! 3559 3580 ENDDO … … 3690 3711 frac_origveg(:,vid) = REAL(n_origveg(:,vid),r_std) / REAL(n_found(:),r_std) 3691 3712 ELSEWHERE 3692 frac_origveg(:,vid) = 0.3713 frac_origveg(:,vid) = zero 3693 3714 ENDWHERE 3694 3715 ENDDO … … 3726 3747 IF ( lalo(ib,1) .LT. -56.0) THEN 3727 3748 ! Antartica 3728 frac_nobio(ib,:) = 0.03729 frac_nobio(ib,iice) = 1.03730 veget(ib,:) = 0.03749 frac_nobio(ib,:) = zero 3750 frac_nobio(ib,iice) = un 3751 veget(ib,:) = zero 3731 3752 ! 3732 3753 ELSE IF ( lalo(ib,1) .GT. 70.0) THEN 3733 3754 ! Artica 3734 frac_nobio(ib,:) = 0.03735 frac_nobio(ib,iice) = 1.03736 veget(ib,:) = 0.03755 frac_nobio(ib,:) = zero 3756 frac_nobio(ib,iice) = un 3757 veget(ib,:) = zero 3737 3758 ! 3738 3759 ELSE IF ( lalo(ib,1) .GT. 55.0 .AND. lalo(ib,2) .GT. -65.0 .AND. lalo(ib,2) .LT. -20.0) THEN 3739 3760 ! Greenland 3740 frac_nobio(ib,:) = 0.03741 frac_nobio(ib,iice) = 1.03742 veget(ib,:) = 0.03761 frac_nobio(ib,:) = zero 3762 frac_nobio(ib,iice) = un 3763 veget(ib,:) = zero 3743 3764 ! 3744 3765 ELSE … … 3771 3792 DO vid = 1, nvm 3772 3793 IF ( veget(ib,vid) .LT. min_vegfrac ) THEN 3773 veget(ib,vid) = 0.03794 veget(ib,vid) = zero 3774 3795 ENDIF 3775 3796 ENDDO … … 3962 3983 frac_origveg(:,vid) = n_origveg(:,vid) / n_found(:) 3963 3984 ELSEWHERE 3964 frac_origveg(:,vid) = 0.3985 frac_origveg(:,vid) = zero 3965 3986 ENDWHERE 3966 3987 ENDDO … … 3998 4019 IF ( lalo(ib,1) .LT. -56.0) THEN 3999 4020 ! Antartica 4000 frac_nobio(ib,:) = 0.04001 frac_nobio(ib,iice) = 1.04002 veget(ib,:) = 0.04021 frac_nobio(ib,:) = zero 4022 frac_nobio(ib,iice) = un 4023 veget(ib,:) = zero 4003 4024 ! 4004 4025 ELSE IF ( lalo(ib,1) .GT. 70.0) THEN 4005 4026 ! Artica 4006 frac_nobio(ib,:) = 0.04007 frac_nobio(ib,iice) = 1.04008 veget(ib,:) = 0.04027 frac_nobio(ib,:) = zero 4028 frac_nobio(ib,iice) = un 4029 veget(ib,:) = zero 4009 4030 ! 4010 4031 ELSE IF ( lalo(ib,1) .GT. 55.0 .AND. lalo(ib,2) .GT. -65.0 .AND. lalo(ib,2) .LT. -20.0) THEN 4011 4032 ! Greenland 4012 frac_nobio(ib,:) = 0.04013 frac_nobio(ib,iice) = 1.04014 veget(ib,:) = 0.04033 frac_nobio(ib,:) = zero 4034 frac_nobio(ib,iice) = un 4035 veget(ib,:) = zero 4015 4036 ! 4016 4037 ELSE … … 4043 4064 DO vid = 1, nvm 4044 4065 IF ( veget(ib,vid) .LT. min_vegfrac ) THEN 4045 veget(ib,vid) = 0.04066 veget(ib,vid) = zero 4046 4067 ENDIF 4047 4068 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.