Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BeamDyn: output summary file in yaml format #1335

Merged
merged 5 commits into from
Nov 30, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 6 additions & 8 deletions modules/beamdyn/src/BeamDyn.f90
Original file line number Diff line number Diff line change
Expand Up @@ -6711,6 +6711,7 @@ END SUBROUTINE BD_GetOP


SUBROUTINE BD_WriteMassStiff( p, m, ErrStat, ErrMsg )
use YAML, only: yaml_write_array
TYPE(BD_ParameterType), INTENT(IN ) :: p !< Parameters
TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< misc/optimization variables ! intent(out) so that we can update the accelerations here...
INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation
Expand All @@ -6731,17 +6732,16 @@ SUBROUTINE BD_WriteMassStiff( p, m, ErrStat, ErrMsg )

! Write out the mass and stiffness in the calculation frame
WRITE(m%Un_Sum,'()')
CALL WrMatrix(RESHAPE(m%StifK, (/p%dof_total, p%dof_total/)), m%Un_Sum, p%OutFmt, 'Full stiffness matrix (BD calculation coordinate frame)')
call yaml_write_array(m%Un_Sum, 'K_BD', RESHAPE(m%StifK, (/p%dof_total, p%dof_total/)), p%OutFmt, ErrStat, ErrMsg, comment='Full stiffness matrix (BD calculation coordinate frame).')
WRITE(m%Un_Sum,'()')
CALL WrMatrix(RESHAPE(m%MassM, (/p%dof_total, p%dof_total/)), m%Un_Sum, p%OutFmt, 'Full mass matrix (BD calculation coordinate frame)')

RETURN
call yaml_write_array(m%Un_Sum, 'M_BD', RESHAPE(m%MassM, (/p%dof_total, p%dof_total/)), p%OutFmt, ErrStat, ErrMsg, comment='Full mass matrix (BD calculation coordinate frame)')

END SUBROUTINE BD_WriteMassStiff
!----------------------------------------------------------------------------------------------------------------------------------


SUBROUTINE BD_WriteMassStiffInFirstNodeFrame( p, x, m, ErrStat, ErrMsg )
use YAML, only: yaml_write_array
TYPE(BD_ParameterType), INTENT(IN ) :: p !< Parameters
TYPE(BD_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at t
TYPE(BD_MiscVarType), INTENT(INOUT) :: m !< misc/optimization variables ! intent(out) so that we can update the accelerations here...
Expand Down Expand Up @@ -6789,10 +6789,8 @@ SUBROUTINE BD_WriteMassStiffInFirstNodeFrame( p, x, m, ErrStat, ErrMsg )
enddo

! Write out the mass and stiffness in the first node frame
WRITE(m%Un_Sum,'()')
CALL WrMatrix(RESHAPE(TmpStifK, (/p%dof_total, p%dof_total/)), m%Un_Sum, p%OutFmt, 'Full stiffness matrix (IEC blade first node coordinate frame)')
WRITE(m%Un_Sum,'()')
CALL WrMatrix(RESHAPE(TmpMassM, (/p%dof_total, p%dof_total/)), m%Un_Sum, p%OutFmt, 'Full mass matrix (IEC blade first node coordinate frame)')
call yaml_write_array(m%Un_Sum, 'K_IEC', TmpStifK, p%OutFmt, ErrStat, ErrMsg, comment='Full stiffness matrix (IEC blade first node coordinate frame)')
call yaml_write_array(m%Un_Sum, 'M_IEC', TmpMassM, p%OutFmt, ErrStat, ErrMsg, comment='Full mass matrix (IEC blade first node coordinate frame)')



Expand Down
200 changes: 60 additions & 140 deletions modules/beamdyn/src/BeamDyn_IO.f90
Original file line number Diff line number Diff line change
Expand Up @@ -1911,7 +1911,7 @@ END SUBROUTINE Calc_WriteOutput
!----------------------------------------------------------------------------------------------------------------------------------
!> This routine generates the summary file, which contains a regurgitation of the input data and interpolated flexible body data.
SUBROUTINE BD_PrintSum( p, x, m, InitInp, ErrStat, ErrMsg )

use YAML, only: yaml_write_var, yaml_write_array, yaml_write_list
! passed variables
TYPE(BD_ParameterType), INTENT(IN) :: p !< Parameters of the structural dynamics module
type(BD_ContinuousStateType), intent(in) :: x !< Continuous states
Expand All @@ -1930,193 +1930,113 @@ SUBROUTINE BD_PrintSum( p, x, m, InitInp, ErrStat, ErrMsg )
CHARACTER(*), PARAMETER :: FmtDat = '(A,T35,1(:,F13.3))' ! Format for outputting mass and modal data.
CHARACTER(*), PARAMETER :: FmtDatT = '(A,T35,1(:,F13.8))' ! Format for outputting time steps.

CHARACTER(30) :: OutPFmt ! Format to print list of selected output channels to summary file
CHARACTER(80) :: OutPFmt ! Format to print list of selected output channels to summary file

! Open the summary file and give it a heading.

CALL GetNewUnit( UnSu, ErrStat, ErrMsg )
CALL OpenFOutFile ( UnSu, TRIM( InitInp%RootName )//'.sum', ErrStat, ErrMsg )
CALL OpenFOutFile ( UnSu, TRIM( InitInp%RootName )//'.sum.yaml', ErrStat, ErrMsg )
IF ( ErrStat >= AbortErrLev ) RETURN

! Heading:
WRITE (UnSu,'(/,A)') 'This summary information was generated by '//TRIM( GetNVD(BeamDyn_Ver) )// &
' on '//CurDate()//' at '//CurTime()//'.'

WRITE (UnSu,'(A,F13.3)') 'Blade mass (kg) ', p%blade_mass
WRITE (UnSu,'(A,F13.3)' ) 'Blade length (m) ', p%blade_length

WRITE (UnSu,'(A)') 'Blade center of mass (IEC coords): '
WRITE (UnSu,'(3ES18.5)' ) p%blade_CG(:)

WRITE (UnSu,'(A)') 'Blade mass moment of inertia: '
DO i=1,3
WRITE (UnSu,'(3ES18.5)' ) p%blade_IN(i,:)
ENDDO

WRITE (UnSu,'(A)') 'Global position vector (IEC coords):'
WRITE (UnSu,'(3ES18.5)' ) p%GlbPos(:)

WRITE (UnSu,'(A)') 'Global rotation tensor (IEC coords):'
DO i=1,3
WRITE (UnSu,'(3ES18.5)' ) p%GlbRot(i,:)
ENDDO

WRITE (UnSu,'(A)') 'Initial blade orientation tensor (relative to global rotation tensor):'
DO i=1,3
WRITE (UnSu,'(3ES18.5)' ) InitInp%RootOri(i,:)
ENDDO

WRITE (UnSu,'(A)') 'Global rotation WM parameters (IEC coords):'
WRITE (UnSu,'(3ES18.5)' ) p%Glb_crv(:)

WRITE (UnSu,'(A)') 'Gravity vector (m/s^2) (IEC coords):'
WRITE (UnSu,'(3ES18.5)' ) p%gravity(:)
WRITE (UnSu,'(A)') '#This summary information was generated by '//TRIM( GetNVD(BeamDyn_Ver) )

WRITE (UnSu,'(/,A)') '# --- Main parameters'
call yaml_write_var (UnSu, 'Mass' , p%blade_mass , 'F13.3', ErrStat, ErrMsg, comment='(kg)')
call yaml_write_var (UnSu, 'Length' , p%blade_length , 'F13.3', ErrStat, ErrMsg, comment='(m)')
call yaml_write_list (UnSu, 'CG' , p%blade_CG , 'ES18.5', ErrStat, ErrMsg, comment='Blade center of mass (IEC coords) (m) from blade root')
call yaml_write_array(UnSu, 'JRoot' , p%blade_IN , 'ES18.5', ErrStat, ErrMsg, comment='Blade mass moment of inertia at blade root. NOTE: from mass distribution only, missing some important inertial contributions (see PR#1337)')
call yaml_write_list (UnSu, 'GlbPos' , p%GlbPos , 'ES18.5', ErrStat, ErrMsg, comment='Global position vector (IEC coords) of blade root')
call yaml_write_array(UnSu, 'GlbRot' , p%GlbRot , 'ES18.5', ErrStat, ErrMsg, comment='Global rotation tensor (IEC coords)')
call yaml_write_array(UnSu, 'RootOri' , InitInp%RootOri , 'ES18.5', ErrStat, ErrMsg, comment='Initial blade orientation tensor (relative to global rotation tensor)')
call yaml_write_list (UnSu, 'GlbCrv' , p%Glb_crv , 'ES18.5', ErrStat, ErrMsg, comment='Global rotation WM parameters (IEC coords)')
call yaml_write_list (UnSu, 'Gravity' , p%gravity , 'ES18.5', ErrStat, ErrMsg, comment='Gravity vector (m/s^2) (IEC coords)')

!FIXME:analysis_type
IF(p%analysis_type .EQ. BD_STATIC_ANALYSIS) THEN
WRITE (UnSu,'(A,T59,A15)') 'Analysis type:','STATIC'
WRITE (UnSu,'(A,T59,A15)') 'Analysis_type:','"STATIC"'
ELSEIF(p%analysis_type .EQ. BD_DYNAMIC_ANALYSIS) THEN
WRITE (UnSu,'(A,T59,A15)') 'Analysis type:','DYNAMIC'
WRITE (UnSu,'(A,T59,A15)') 'Analysis_type:','"DYNAMIC"'
ELSEIF(p%analysis_type .EQ. BD_DYN_SSS_ANALYSIS) THEN
WRITE (UnSu,'(A,T37,A)') 'Analysis type:','DYNAMIC with quasi-steady-state start'
WRITE (UnSu,'(A,T37,A)') 'Analysis_type:','"DYNAMIC with quasi-steady-state start"'
ENDIF

WRITE (UnSu,'(A,T59,1ES15.5)') 'Numerical damping parameter:',p%rhoinf

WRITE (UnSu,'(A,T59,1ES15.5)') 'Time increment:',p%dt

WRITE (UnSu,'(A,T59,I15)' ) 'Maximum number of iterations in Newton-Raphson solution:', p%niter
WRITE (UnSu,'(A,T59,1ES15.5)' ) 'Convergence parameter:', p%tol
WRITE (UnSu,'(A,T59,I15)' ) 'Factorization frequency in Newton-Raphson solution:', p%n_fact
call yaml_write_var (UnSu, 'Rhoinf' , p%rhoinf , 'ES15.5', ErrStat, ErrMsg, comment='Numerical damping parameter')
call yaml_write_var (UnSu, 'dt' , p%dt , 'ES15.5', ErrStat, ErrMsg, comment='Time increment')
call yaml_write_var (UnSu, 'niter' , p%niter , 'I15' , ErrStat, ErrMsg, comment='Maximum number of iterations in Newton-Raphson solution')
call yaml_write_var (UnSu, 'tol' , p%tol , 'ES15.5' , ErrStat, ErrMsg, comment='Convergence parameter')
call yaml_write_var (UnSu, 'n_fact' , p%n_fact , 'I15' , ErrStat, ErrMsg, comment='Factorization frequency in Newton-Raphson solution')

IF(p%quadrature .EQ. GAUSS_QUADRATURE) THEN
WRITE (UnSu,'(A,T59,A15)') 'Quadrature method: ', 'Gaussian'
WRITE (UnSu,'(A,T59,A15)') 'Quadrature_method: ', 'Gaussian'
ELSEIF(p%quadrature .EQ. TRAP_QUADRATURE) THEN
WRITE (UnSu,'(A,T59,A15)') 'Quadrature method: ', 'Trapezoidal'
WRITE (UnSu,'(A,T59,I15)' ) 'FE mesh refinement factor:', p%refine
WRITE (UnSu,'(A,T59,A15)') 'Quadrature_method: ', 'Trapezoidal'
WRITE (UnSu,'(A,T59,I15)' ) 'FE_mesh_refinement_factor:', p%refine
ENDIF

WRITE (UnSu,'(A,T59,I15)' ) 'Number of elements: ', p%elem_total

WRITE (UnSu,'(A,T59,I15)' ) 'Number of nodes: ', p%node_total

WRITE (UnSu,'(/,A)') 'Initial position vectors (IEC coordinate system)'
k=1
WRITE (UnSu,'(A,T59,I15)' ) 'Number_of_elements: ', p%elem_total
WRITE (UnSu,'(A,T59,I15)' ) 'Number_of_nodes: ', p%node_total

WRITE (UnSu,'(/,A)') '# --- Initial values and conditions'
! EB: NOTE: information about node and global node were lost here. Can be reintroduced by creating a matrix with indices and u in it. Or use "label" keyword in Yaml.
! OK until we introduce more elements
WRITE (UnSu,'(A)') '# Initial position and Weiner-Milenkovic rotation vectors of nodes (IEC coordinate system)'
WRITE (UnSu, '("#", 6(2x,A))') ' X ',' Y ',' Z ',' WM_x ',' WM_y ',' WM_z '
WRITE (UnSu, '("#", 6(2x,A))') ' -----------------','-----------------','-----------------','-----------------','-----------------','-----------------'
DO i=1,p%elem_total
WRITE (UnSu,'(2x,A,I4)') 'Element number: ',i
WRITE (UnSu, '(2x,A,1x,A,1x,3(1x,A))') 'Node', 'Global node',' X ',' Y ',' Z '
WRITE (UnSu, '(2x,A,1x,A,1x,3(1x,A))') '----', '-----------','-----------------','-----------------','-----------------'
DO j = 1, p%nodes_per_elem
WRITE(UnSu,'(I6,1x,I9,2x,3ES18.5)') j,k,p%uuN0(1:3,j,i)
k=k+1
ENDDO
k = k-1
ENDDO
WRITE (UnSu,'(/,A)') 'Initial Weiner-Milenkovic rotation vectors (IEC coordinate system)'
k=1
DO i=1,p%elem_total
WRITE (UnSu,'(2x,A,I4)') 'Element number: ',i
WRITE (UnSu, '(2x,A,1x,A,1x,3(1x,A))') 'Node', 'Global node',' WM_x ',' WM_y ',' WM_z '
WRITE (UnSu, '(2x,A,1x,A,1x,3(1x,A))') '----', '-----------','-----------------','-----------------','-----------------'
DO j = 1, p%nodes_per_elem
WRITE(UnSu,'(I6,1x,I9,2x,3ES18.5)') j,k,p%uuN0(4:6,j,i)
k=k+1
ENDDO
k = k-1
WRITE (UnSu, '("#", 1x,A,I4)') 'Element number: ',i
call yaml_write_array(UnSu, 'Init_Nodes_E'//num2lstr(i), transpose(p%uuN0(1:6,:,i)), 'DummyFmt', ErrStat, ErrMsg, AllFmt='5(ES18.5,","),ES18.5')
ENDDO

WRITE (UnSu,'(/,A)') 'Quadrature point position vectors'
k=1
DO i=1,p%elem_total
WRITE (UnSu,'(2x,A,I4)') 'Element number: ',i
WRITE (UnSu, '(2x,A,1x,A,1x,3(1x,A))') ' QP ', ' Global QP ',' X ',' Y ',' Z '
WRITE (UnSu, '(2x,A,1x,A,1x,3(1x,A))') '----', '-----------','-----------------','-----------------','-----------------'
DO j = 1, p%nqp
WRITE(UnSu,'(I6,1x,I9,2x,3ES18.5)') j,k,p%uu0(1:3,j,i)
k=k+1
ENDDO
k = k-1
ENDDO
WRITE (UnSu,'(/,A)') 'Quadrature point rotation vectors'
k=1
WRITE (UnSu,'(/,A)') '# Quadrature points position and rotation vectors'
WRITE (UnSu, '("#", 6(2x,A))') ' X ',' Y ',' Z ',' WM_x ',' WM_y ',' WM_z '
WRITE (UnSu, '("#", 6(2x,A))') ' -----------------','-----------------','-----------------','-----------------','-----------------','-----------------'
DO i=1,p%elem_total
WRITE (UnSu,'(2x,A,I4)') 'Element number: ',i
WRITE (UnSu, '(2x,A,1x,A,1x,3(1x,A))') ' QP ', ' Global QP ',' WM_x ',' WM_y ',' WM_z '
WRITE (UnSu, '(2x,A,1x,A,1x,3(1x,A))') '----', '-----------','-----------------','-----------------','-----------------'
DO j = 1, p%nqp
WRITE(UnSu,'(I6,1x,I9,2x,3ES18.5)') j,k,p%uu0(4:6,j,i)
k=k+1
ENDDO
k = k-1
WRITE (UnSu, '("#", 1x,A,I4)') 'Element number: ',i
call yaml_write_array(UnSu, 'Init_QP_E'//num2lstr(i), transpose(p%uu0(1:6,:,i)), 'DummyFmt', ErrStat, ErrMsg, AllFmt='5(ES18.5,","),ES18.5')
ENDDO

WRITE (UnSu,'(/,A)') 'Sectional stiffness and mass matrices at quadrature points (in IEC coordinates)'
WRITE (UnSu,'(/,A)') '# Sectional stiffness and mass matrices at quadrature points (in IEC coordinates)'
DO i=1,size(p%Stif0_QP,3)
WRITE (UnSu,'(/,A,I4)') 'Quadrature point number: ',i
DO j=1,6
WRITE(UnSu,'(6ES15.5)') p%Stif0_QP(j,1:6,i)
ENDDO
WRITE(UnSu,'(A)')
DO j=1,6
WRITE(UnSu,'(6ES15.5)') p%Mass0_QP(j,1:6,i)
ENDDO
ENDDO

WRITE (UnSu,'(/,A)') 'Initial displacement'
DO i=1,p%node_total
WRITE(UnSu,'(I4,3ES18.5)') i,x%q(1:3,i)
ENDDO

WRITE (UnSu,'(/,A)') 'Initial rotation'
DO i=1,p%node_total
WRITE(UnSu,'(I4,3ES18.5)') i,x%q(4:6,i)
ENDDO

WRITE (UnSu,'(/,A)') 'Initial velocity'
DO i=1,p%node_total
WRITE(UnSu,'(I4,3ES18.5)') i,x%dqdt(1:3,i)
ENDDO

WRITE (UnSu,'(/,A)') 'Initial angular velocity'
DO i=1,p%node_total
WRITE(UnSu,'(I4,3ES18.5)') i,x%dqdt(4:6,i)
WRITE (UnSu,'(A,I4)') '# Quadrature point number: ',i
call yaml_write_array(UnSu, 'Init_K_QP'//num2lstr(i), p%Stif0_QP(:,1:6,i), 'ES15.5', ErrStat, ErrMsg)
call yaml_write_array(UnSu, 'Init_M_QP'//num2lstr(i), p%Mass0_QP(:,1:6,i), 'ES15.5', ErrStat, ErrMsg)
ENDDO
call yaml_write_array(UnSu, 'Init_q' , transpose(x%q(1:6,:) ), 'ES18.5', ErrStat, ErrMsg, comment='Initial displacement and rotation')
call yaml_write_array(UnSu, 'Init_dqdt', transpose(x%dqdt(1:6,:)), 'ES18.5', ErrStat, ErrMsg, comment='Initial velocity and angular velocity')


WRITE (UnSu,'(/,A)') '# --- Outputs'
select case (p%BldMotionNodeLoc)
case (BD_MESH_FE)
WRITE (UnSu, '(/,A)') 'Output nodes located at finite element nodes.'
WRITE (UnSu, '(A)') 'Output_nodes_location: "finite element nodes"'
case (BD_MESH_QP)
WRITE (UnSu, '(/,A)') 'Output nodes located at quadrature points.'
WRITE (UnSu, '(A)') 'Output_nodes_location: "quadrature points"'
case (BD_MESH_STATIONS)
WRITE (UnSu, '(/,A)') 'Output nodes located at blade propery input station locations.'
WRITE (UnSu, '(A)') 'Output_nodes_location: "blade propery input station locations"'
!bjj: need to write where these nodes are located...
end select



! output channels:
OutPFmt = '( I4, 3X,A '//TRIM(Num2LStr(ChanLen))//',1 X, A'//TRIM(Num2LStr(ChanLen))//' )'
WRITE (UnSu,'(//,A,/)') 'Requested Outputs:'
WRITE (UnSu,"( ' Col Parameter Units', /, ' --- -------------- ----------')")
! Output channels:
OutPFmt = '("# - [", I4, ",", 3X, A'//TRIM(Num2LStr(ChanLen+2))//', "," , 1 X, A'//TRIM(Num2LStr(ChanLen+2))//', "]" )'
WRITE (UnSu, '(A)') "# OutList: # Requested Outputs (Index, Parameter, Unit)"
DO I = 0,p%NumOuts
WRITE (UnSu,OutPFmt) I, p%OutParam(I)%Name, p%OutParam(I)%Units
WRITE (UnSu,OutPFmt) I, '"'//trim(p%OutParam(I)%Name)//'"', '"'//trim(p%OutParam(I)%Units)//'"'
END DO


WRITE (UnSu,'(15x,A)')
WRITE (UnSu,'(15x,A)')
WRITE (UnSu,'(15x,A)') 'Requested Output Channels at each blade station:'
WRITE (UnSu,'(15x,A)') 'Col Parameter Units'
WRITE (UnSu,'(15x,A)') '---- --------- -----'
WRITE (UnSu,'("#", 15x,A)')
WRITE (UnSu, '(A)') "# OutList_BldNd: # Requested Outputs at each blade station (Index, Parameter, Unit)"
DO I = 1,p%BldNd_NumOuts
WRITE (UnSu,OutPFmt) I, p%BldNd_OutParam(I)%Name, p%BldNd_OutParam(I)%Units
WRITE (UnSu,OutPFmt) I, '"'//trim(p%BldNd_OutParam(I)%Name)//'"', '"'//trim(p%BldNd_OutParam(I)%Units)//'"'
END DO


if ( p%analysis_type /= BD_STATIC_ANALYSIS ) then !dynamic analysis
! we'll add mass and stiffness matrices in the first call to UpdateStates
m%Un_Sum = UnSu
WRITE (UnSu,'(/,A)') '# --- System matrices'
else
CLOSE(UnSu)
end if
Expand Down
1 change: 1 addition & 0 deletions modules/beamdyn/src/Driver_Beam.f90
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ PROGRAM BeamDyn_Driver_Program

! initialize the BD_InitInput values not in the driver input file
BD_InitInput%RootName = TRIM(BD_Initinput%InputFile)
BD_InitInput%RootName = TRIM(RootName)//'.BD'
BD_InitInput%RootDisp = 0.d0
BD_InitInput%DynamicSolve = DvrData%DynamicSolve ! QuasiStatic options handled within the BD code.

Expand Down
1 change: 1 addition & 0 deletions vs-build/AeroDyn/AeroDyn_Driver.vfproj
Original file line number Diff line number Diff line change
Expand Up @@ -1024,6 +1024,7 @@
<FileConfiguration Name="Debug_Double|x64">
<Tool Name="VFFortranCompilerTool" WarnUnusedVariables="false"/></FileConfiguration></File>
<File RelativePath="..\..\modules\nwtc-library\src\NWTC_Num.f90"/>
<File RelativePath="..\..\modules\nwtc-library\src\VTK.f90"/>
<File RelativePath="..\..\modules\nwtc-library\src\SingPrec.f90"/>
<File RelativePath="..\..\modules\nwtc-library\src\SysIVF.f90"/>
<File RelativePath="..\..\modules\nwtc-library\src\VTK.f90"/></Filter>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1186,6 +1186,7 @@
<FileConfiguration Name="Debug_Double|x64">
<Tool Name="VFFortranCompilerTool" WarnUnusedVariables="false"/></FileConfiguration></File>
<File RelativePath="..\..\modules\nwtc-library\src\NWTC_Num.f90"/>
<File RelativePath="..\..\modules\nwtc-library\src\VTK.f90"/>
<File RelativePath="..\..\modules\nwtc-library\src\SingPrec.f90"/>
<File RelativePath="..\..\modules\nwtc-library\src\SysIVF.f90"/>
<File RelativePath="..\..\modules\nwtc-library\src\VTK.f90"/></Filter>
Expand Down