846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
874 USE pio
875
877
878 implicit none
879
880
881
882 integer, intent(in) :: ng
883 integer, intent(out) :: status
884
885 character (*), intent(in) :: ncname
886 character (*), intent(in) :: aname
887
888 TYPE (File_desc_t), intent(in) :: pioFile
889 TYPE(T_LBC), intent(in) :: S(4,nLBCvar,Ngrids)
890
891
892
893 integer :: i, ibry, ie, ifield, is, lstr, lvar
894
895 character (len= 1) :: newline
896 character (len= 7) :: string(4)
897 character (len= 21) :: frmt
898 character (len= 100) :: line
899 character (len=2816) :: lbc_att
900
901 character (len=*), parameter :: MyFile = &
902 & __FILE__//", lbc_putatt_pio"
903
904
905
906
907
908
909
910 lvar=0
912 IF (
idbvar(ifield).gt.0)
THEN
914 END IF
915 END DO
916 WRITE (frmt,10) "(a,':',t", lvar+4, ",5a)"
917 10 FORMAT (a,i0,a)
918
919
920
921 newline=char(10)
922 lstr=len_trim(newline)
923 DO i=1,len(lbc_att)
924 lbc_att(i:i)=' '
925 END DO
926 lbc_att(1:lstr)=newline(1:lstr)
927 is=lstr+1
928 WRITE (line,frmt) 'EDGE', &
929 & 'WEST ', &
930 & 'SOUTH ', &
931 & 'EAST ', &
932 & 'NORTH ', &
933 & newline(1:lstr)
934 lstr=len_trim(line)
935 ie=is+lstr
936 lbc_att(is:ie)=line(1:lstr)
937 is=ie
938
939
940
941
943 IF (len(lbc_att).lt.lstr) THEN
945 WRITE (
stdout,20) len(lbc_att), lstr
946 20 FORMAT (/,' LBC_PUTATT_PIO - Length of local string lbc_att', &
947 & ' too small',/,18x,'Current = ',i5,' Needed = ',i5)
948 END IF
950 RETURN
951 END IF
952
953
954
956 IF (
idbvar(ifield).gt.0)
THEN
957 DO ibry=1,4
958 IF (s(ibry,ifield,ng)%Chapman_explicit) THEN
959 string(ibry)='Che '
960 ELSE IF (s(ibry,ifield,ng)%Chapman_implicit) THEN
961 string(ibry)='Cha '
962 ELSE IF (s(ibry,ifield,ng)%clamped) THEN
963 string(ibry)='Cla '
964 ELSE IF (s(ibry,ifield,ng)%closed) THEN
965 string(ibry)='Clo '
966 ELSE IF (s(ibry,ifield,ng)%Flather) THEN
967 string(ibry)='Fla '
968 ELSE IF (s(ibry,ifield,ng)%gradient) THEN
969 string(ibry)='Gra '
970 ELSE IF (s(ibry,ifield,ng)%nested) THEN
971 string(ibry)='Nes '
972 ELSE IF (s(ibry,ifield,ng)%periodic) THEN
973 string(ibry)='Per '
974 ELSE IF (s(ibry,ifield,ng)%radiation) THEN
975 IF (s(ibry,ifield,ng)%nudging) THEN
976 string(ibry)='RadNud '
977 ELSE
978 string(ibry)='Rad '
979 END IF
980 ELSE IF (s(ibry,ifield,ng)%reduced) THEN
981 string(ibry)='Red '
982 ELSE IF (s(ibry,ifield,ng)%Shchepetkin) THEN
983 string(ibry)='Shc '
984 END IF
985 END DO
986 IF (ifield.eq.
nlbcvar) newline=
' '
992 & newline
993 lstr=len_trim(line)
994 ie=is+lstr
995 lbc_att(is:ie)=line(1:lstr)
996 is=ie
997 END IF
998 END DO
999
1000
1001
1002 status=pio_put_att(piofile, pio_global, trim(aname), &
1003 & trim(lbc_att))
1004 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1007 RETURN
1008 END IF
1009
1010 RETURN