Skip to content

Commit 82dc830

Browse files
authored
Merge pull request #3117 from luwang00/SD_NPropSet
Updated SD NPropSets to NPropSetsCyl and NPropSetsRec and fixed typos in the HD input file
2 parents 8547c41 + 12d6303 commit 82dc830

File tree

5 files changed

+45
-45
lines changed

5 files changed

+45
-45
lines changed

docs/source/user/subdyn/input_files.rst

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ thickness, **XsecT**. Note that setting **XsecT** to a value less than
546546
or equal to zero implies a solid section. Users will need to create an
547547
entry in the first table within this section of the input file identified by
548548
**PropSetID**, for each unique combination of these five properties.
549-
The member property-set table contains **NPropSets** rows. The member
549+
The member property-set table contains **NPropSetsCyl** rows. The member
550550
property sets are referred to by their **PropSetID** in the MEMBERS
551551
table above. Note, however, that although diameter and thickness will
552552
be linearly interpolated within an individual member, SubDyn will not
@@ -566,11 +566,11 @@ which might not be accurate. This is different from circular sections for
566566
which the shear area and torsion constant can be automatically computed by
567567
SubDyn for arbitrary wall thickness. The properties of unique rectangular
568568
beam sections are entered on separate rows of the second table of this input
569-
file section. Again, the table should have **NPropSets** rows.
569+
file section. Again, the table should have **NPropSetsRec** rows.
570570

571571
The third table in this section of the input file have **NXPropSets**
572-
rows and have additional entries when compared to the previous
573-
table, including: cross-sectional area (**XsecA**), cross-sectional
572+
rows and have additional entries when compared to the two previous
573+
tables, including: cross-sectional area (**XsecA**), cross-sectional
574574
shear area along the local principal axes *x* and *y* (**XsecAsx**,
575575
**XsecAsy**), cross-sectional area second moment of inertia about *x*
576576
and *y* (**XsecJxx**, **XsecJyy**), cross-sectional polar area

modules/subdyn/src/SubDyn.f90

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1421,43 +1421,43 @@ SUBROUTINE SD_Input(SDInputFile, Init, p, ErrStat,ErrMsg)
14211421

14221422
!------------------ MEMBER CROSS-SECTION PROPERTY data 1/3 [isotropic material for now: use this table if circular-tubular elements ------------------------
14231423
CALL ReadCom ( UnIn, SDInputFile, ' Member CROSS-Section Property Data 1/3 ',ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1424-
CALL ReadIVar ( UnIn, SDInputFile, Init%NPropSetsBC, 'NPropSets', 'Number of property sets',ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1425-
CALL ReadCom ( UnIn, SDInputFile, 'Property Data 1/2 Header' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1426-
CALL ReadCom ( UnIn, SDInputFile, 'Property Data 1/2 Units ' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1424+
CALL ReadIVar ( UnIn, SDInputFile, Init%NPropSetsBC, 'NPropSetsCyl', 'Number of circular beam section property sets',ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1425+
CALL ReadCom ( UnIn, SDInputFile, 'Property Data 1/3 Header' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1426+
CALL ReadCom ( UnIn, SDInputFile, 'Property Data 1/3 Units ' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
14271427
CALL AllocAry(Init%PropSetsBC, Init%NPropSetsBC, PropSetsBCCol, 'PropSets', ErrStat2, ErrMsg2) ; if(Failed()) return
14281428
DO I = 1, Init%NPropSetsBC
1429-
CALL ReadAry( UnIn, SDInputFile, Dummy_ReAry, PropSetsBCCol, 'PropSets', 'PropSets number and values ', ErrStat2 , ErrMsg2, UnEc); if(Failed()) return
1429+
CALL ReadAry( UnIn, SDInputFile, Dummy_ReAry, PropSetsBCCol, 'PropSetsBC', 'PropSetsBC ID and values ', ErrStat2 , ErrMsg2, UnEc); if(Failed()) return
14301430
Init%PropSetsBC(I,:) = Dummy_ReAry(1:PropSetsBCCol)
14311431
ENDDO
14321432
IF (Check( Init%NPropSetsBC < 0, 'NPropSetsBC must be >=0')) return
14331433

14341434
!------------------ MEMBER CROSS-SECTION PROPERTY data 2/3 [isotropic material for now: use this table if rectangular-tubular elements ---------------------
14351435
CALL ReadCom ( UnIn, SDInputFile, ' Member CROSS-Section Property Data 2/3 ',ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1436-
CALL ReadIVar ( UnIn, SDInputFile, Init%NPropSetsBR, 'NPropSets', 'Number of property sets',ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1437-
CALL ReadCom ( UnIn, SDInputFile, 'Property Data 1/2 Header' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1438-
CALL ReadCom ( UnIn, SDInputFile, 'Property Data 1/2 Units ' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1436+
CALL ReadIVar ( UnIn, SDInputFile, Init%NPropSetsBR, 'NPropSetsRec', 'Number of rectangular beam section property sets',ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1437+
CALL ReadCom ( UnIn, SDInputFile, 'Property Data 2/3 Header' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1438+
CALL ReadCom ( UnIn, SDInputFile, 'Property Data 2/3 Units ' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
14391439
CALL AllocAry(Init%PropSetsBR, Init%NPropSetsBR, PropSetsBRCol, 'PropSets', ErrStat2, ErrMsg2) ; if(Failed()) return
14401440
DO I = 1, Init%NPropSetsBR
1441-
CALL ReadAry( UnIn, SDInputFile, Dummy_ReAry, PropSetsBRCol, 'PropSets', 'PropSets number and values ', ErrStat2 , ErrMsg2, UnEc); if(Failed()) return
1441+
CALL ReadAry( UnIn, SDInputFile, Dummy_ReAry, PropSetsBRCol, 'PropSetsBR', 'PropSetsBR ID and values ', ErrStat2 , ErrMsg2, UnEc); if(Failed()) return
14421442
Init%PropSetsBR(I,:) = Dummy_ReAry(1:PropSetsBRCol)
14431443
ENDDO
14441444
IF (Check( Init%NPropSetsBR < 0, 'NPropSetsBR must be >=0')) return
14451445

1446-
!------------------ MEMBER CROSS-SECTION PROPERTY data 2/3 [isotropic material for now: use this table if any section other than circular, however provide COSM(i,j) below) ------------------------
1446+
!------------------ MEMBER CROSS-SECTION PROPERTY data 3/3 [isotropic material for now: use this table if other elements) ----------------------------------
14471447
CALL ReadCom ( UnIn, SDInputFile, 'Member CROSS-Section Property Data 3/3 ' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1448-
CALL ReadIVar ( UnIn, SDInputFile, Init%NPropSetsX, 'NXPropSets', 'Number of non-circular property sets',ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1449-
CALL ReadCom ( UnIn, SDInputFile, 'Property Data 2/2 Header' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1450-
CALL ReadCom ( UnIn, SDInputFile, 'Property Data 2/2 Unit ' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1451-
CALL AllocAry(Init%PropSetsX, Init%NPropSetsX, PropSetsXCol, 'XPropSets', ErrStat2, ErrMsg2); if(Failed()) return
1448+
CALL ReadIVar ( UnIn, SDInputFile, Init%NPropSetsX, 'NXPropSets', 'Number of arbitrary beam section property sets',ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1449+
CALL ReadCom ( UnIn, SDInputFile, 'Property Data 3/3 Header' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1450+
CALL ReadCom ( UnIn, SDInputFile, 'Property Data 3/3 Units ' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1451+
CALL AllocAry(Init%PropSetsX, Init%NPropSetsX, PropSetsXCol, 'PropSetsX', ErrStat2, ErrMsg2); if(Failed()) return
14521452
DO I = 1, Init%NPropSetsX
1453-
CALL ReadAry( UnIn, SDInputFile, Init%PropSetsX(I,:), PropSetsXCol, 'XPropSets', 'XPropSets ID and values ', ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1453+
CALL ReadAry( UnIn, SDInputFile, Init%PropSetsX(I,:), PropSetsXCol, 'PropSetsX', 'PropSetsX ID and values ', ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
14541454
ENDDO
14551455
IF (Check( Init%NPropSetsX < 0, 'NPropSetsX must be >=0')) return
14561456

14571457
if (.not. LegacyFormat) then
14581458
!-------------------------- CABLE PROPERTIES -------------------------------------
14591459
CALL ReadCom ( UnIn, SDInputFile, 'Cable properties' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1460-
CALL ReadIVar ( UnIn, SDInputFile, Init%NPropSetsC, 'NPropSetsC', 'Number of cable properties' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1460+
CALL ReadIVar ( UnIn, SDInputFile, Init%NPropSetsC, 'NCablePropSets', 'Number of cable properties' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
14611461
CALL ReadCom ( UnIn, SDInputFile, 'Cable properties Header' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
14621462
CALL ReadCom ( UnIn, SDInputFile, 'Cable properties Unit ' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
14631463
IF (Check( Init%NPropSetsC < 0, 'NPropSetsCable must be >=0')) return
@@ -1489,7 +1489,7 @@ SUBROUTINE SD_Input(SDInputFile, Init, p, ErrStat,ErrMsg)
14891489

14901490
!----------------------- RIGID LINK PROPERTIES ------------------------------------
14911491
CALL ReadCom ( UnIn, SDInputFile, 'Rigid link properties' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1492-
CALL ReadIVar ( UnIn, SDInputFile, Init%NPropSetsR, 'NPropSetsR', 'Number of rigid link properties' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1492+
CALL ReadIVar ( UnIn, SDInputFile, Init%NPropSetsR, 'NRigidPropSets', 'Number of rigid link properties' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
14931493
CALL ReadCom ( UnIn, SDInputFile, 'Rigid link properties Header' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
14941494
CALL ReadCom ( UnIn, SDInputFile, 'Rigid link properties Unit ' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
14951495
CALL AllocAry(Init%PropSetsR, Init%NPropSetsR, PropSetsRCol, 'RigidPropSets', ErrStat2, ErrMsg2); if(Failed()) return
@@ -1499,7 +1499,7 @@ SUBROUTINE SD_Input(SDInputFile, Init, p, ErrStat,ErrMsg)
14991499
IF (Check( Init%NPropSetsR < 0, 'NPropSetsRigid must be >=0')) return
15001500
!----------------------- SPRING ELEMENT PROPERTIES --------------------------------
15011501
CALL ReadCom ( UnIn, SDInputFile, 'Spring element properties' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1502-
CALL ReadIVar ( UnIn, SDInputFile, Init%NPropSetsS, 'NPropSetsS', 'Number of spring properties' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
1502+
CALL ReadIVar ( UnIn, SDInputFile, Init%NPropSetsS, 'NSpringPropSets', 'Number of spring properties' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
15031503
CALL ReadCom ( UnIn, SDInputFile, 'Spring element properties Header' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
15041504
CALL ReadCom ( UnIn, SDInputFile, 'Spring element properties Unit ' ,ErrStat2, ErrMsg2, UnEc ); if(Failed()) return
15051505
IF (Check( Init%NPropSetsS < 0, 'NPropSetsSpring must be >=0')) return

openfast_io/openfast_io/FAST_reader.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2658,16 +2658,16 @@ def read_SubDyn(self, sd_file):
26582658
self.fst_vt['SubDyn']['M_COSMID'][i] = -1
26592659
f.readline()
26602660
# MEMBER X-SECTION PROPERTY data 1/3
2661-
self.fst_vt['SubDyn']['NBCPropSets'] = int_read(f.readline().split()[0])
2662-
self.fst_vt['SubDyn']['PropSetID1'] = [None]*self.fst_vt['SubDyn']['NBCPropSets']
2663-
self.fst_vt['SubDyn']['YoungE1'] = [None]*self.fst_vt['SubDyn']['NBCPropSets']
2664-
self.fst_vt['SubDyn']['ShearG1'] = [None]*self.fst_vt['SubDyn']['NBCPropSets']
2665-
self.fst_vt['SubDyn']['MatDens1'] = [None]*self.fst_vt['SubDyn']['NBCPropSets']
2666-
self.fst_vt['SubDyn']['XsecD'] = [None]*self.fst_vt['SubDyn']['NBCPropSets']
2667-
self.fst_vt['SubDyn']['XsecT'] = [None]*self.fst_vt['SubDyn']['NBCPropSets']
2661+
self.fst_vt['SubDyn']['NPropSetsCyl'] = int_read(f.readline().split()[0])
2662+
self.fst_vt['SubDyn']['PropSetID1'] = [None]*self.fst_vt['SubDyn']['NPropSetsCyl']
2663+
self.fst_vt['SubDyn']['YoungE1'] = [None]*self.fst_vt['SubDyn']['NPropSetsCyl']
2664+
self.fst_vt['SubDyn']['ShearG1'] = [None]*self.fst_vt['SubDyn']['NPropSetsCyl']
2665+
self.fst_vt['SubDyn']['MatDens1'] = [None]*self.fst_vt['SubDyn']['NPropSetsCyl']
2666+
self.fst_vt['SubDyn']['XsecD'] = [None]*self.fst_vt['SubDyn']['NPropSetsCyl']
2667+
self.fst_vt['SubDyn']['XsecT'] = [None]*self.fst_vt['SubDyn']['NPropSetsCyl']
26682668
ln = f.readline().split()
26692669
ln = f.readline().split()
2670-
for i in range(self.fst_vt['SubDyn']['NBCPropSets']):
2670+
for i in range(self.fst_vt['SubDyn']['NPropSetsCyl']):
26712671
ln = f.readline().split()
26722672
self.fst_vt['SubDyn']['PropSetID1'][i] = int(ln[0])
26732673
self.fst_vt['SubDyn']['YoungE1'][i] = float(ln[1])
@@ -2677,17 +2677,17 @@ def read_SubDyn(self, sd_file):
26772677
self.fst_vt['SubDyn']['XsecT'][i] = float(ln[5])
26782678
f.readline()
26792679
# MEMBER X-SECTION PROPERTY data 2/3
2680-
self.fst_vt['SubDyn']['NBRPropSets'] = int_read(f.readline().split()[0])
2681-
self.fst_vt['SubDyn']['PropSetID2'] = [None]*self.fst_vt['SubDyn']['NBRPropSets']
2682-
self.fst_vt['SubDyn']['YoungE2'] = [None]*self.fst_vt['SubDyn']['NBRPropSets']
2683-
self.fst_vt['SubDyn']['ShearG2'] = [None]*self.fst_vt['SubDyn']['NBRPropSets']
2684-
self.fst_vt['SubDyn']['MatDens2'] = [None]*self.fst_vt['SubDyn']['NBRPropSets']
2685-
self.fst_vt['SubDyn']['XsecSa'] = [None]*self.fst_vt['SubDyn']['NBRPropSets']
2686-
self.fst_vt['SubDyn']['XsecSb'] = [None]*self.fst_vt['SubDyn']['NBRPropSets']
2687-
self.fst_vt['SubDyn']['XsecT2'] = [None]*self.fst_vt['SubDyn']['NBRPropSets']
2680+
self.fst_vt['SubDyn']['NPropSetsRec'] = int_read(f.readline().split()[0])
2681+
self.fst_vt['SubDyn']['PropSetID2'] = [None]*self.fst_vt['SubDyn']['NPropSetsRec']
2682+
self.fst_vt['SubDyn']['YoungE2'] = [None]*self.fst_vt['SubDyn']['NPropSetsRec']
2683+
self.fst_vt['SubDyn']['ShearG2'] = [None]*self.fst_vt['SubDyn']['NPropSetsRec']
2684+
self.fst_vt['SubDyn']['MatDens2'] = [None]*self.fst_vt['SubDyn']['NPropSetsRec']
2685+
self.fst_vt['SubDyn']['XsecSa'] = [None]*self.fst_vt['SubDyn']['NPropSetsRec']
2686+
self.fst_vt['SubDyn']['XsecSb'] = [None]*self.fst_vt['SubDyn']['NPropSetsRec']
2687+
self.fst_vt['SubDyn']['XsecT2'] = [None]*self.fst_vt['SubDyn']['NPropSetsRec']
26882688
ln = f.readline().split()
26892689
ln = f.readline().split()
2690-
for i in range(self.fst_vt['SubDyn']['NBRPropSets']):
2690+
for i in range(self.fst_vt['SubDyn']['NPropSetsRec']):
26912691
ln = f.readline().split()
26922692
self.fst_vt['SubDyn']['PropSetID2'][i] = int(ln[0])
26932693
self.fst_vt['SubDyn']['YoungE2'][i] = float(ln[1])

openfast_io/openfast_io/FAST_writer.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1689,12 +1689,12 @@ def write_HydroDyn(self):
16891689

16901690
f.write('---------------------- STRIP THEORY OPTIONS --------------------------------------\n')
16911691
f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['WaveDisp'], 'WaveDisp', '- Method of computing Wave Kinematics {0: use undisplaced position, 1: use displaced position) } (switch)\n'))
1692-
f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['AMMod'], 'AMMod', '- Method of computing distributed added-mass force. (0: Only and always on nodes below SWL at the undisplaced position. 2: Up to the instantaneous free surface) [overwrite to 0 when WaveMod = 0 or 6 or when WaveStMod = 0 in SeaState]\n'))
1692+
f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['AMMod'], 'AMMod', '- Method of computing distributed added-mass force. (0: Only and always on nodes below SWL at the undisplaced position. 1: Up to the instantaneous free surface) [overwrite to 0 when WaveStMod = 0 in SeaState]]\n'))
16931693

16941694
f.write('---------------------- AXIAL COEFFICIENTS --------------------------------------\n')
16951695
f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['HydroDyn']['NAxCoef'], 'NAxCoef', '- Number of axial coefficients (-)\n'))
16961696
f.write(" ".join(['{:^11s}'.format(i) for i in ['AxCoefID', 'AxCd', 'AxCa', 'AxCp', 'AxFDMod', 'AxVnCOff', 'AxFDLoFSc']])+'\n')
1697-
f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)']*7])+'\n')
1697+
f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)','(-)','(-)','(-)','(switch)','(Hz)','(-)']])+'\n')
16981698
for i in range(self.fst_vt['HydroDyn']['NAxCoef']):
16991699
ln = []
17001700
ln.append('{:^11d}'.format(self.fst_vt['HydroDyn']['AxCoefID'][i]))
@@ -2210,10 +2210,10 @@ def write_SubDyn(self):
22102210
ln.append('{:^11}'.format(self.fst_vt['SubDyn']['M_Spin'][i]))
22112211
f.write(" ".join(ln) + '\n')
22122212
f.write('------------------ CIRCULAR BEAM CROSS-SECTION PROPERTIES -----------------------------\n')
2213-
f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NBCPropSets'], 'NPropSets', '- Number of structurally unique circular cross-sections\n'))
2213+
f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NPropSetsCyl'], 'NPropSetsCyl', '- Number of structurally unique circular cross-sections (if 0 the following table is ignored)\n'))
22142214
f.write(" ".join(['{:^11s}'.format(i) for i in ['PropSetID', 'YoungE', 'ShearG', 'MatDens', 'XsecD', 'XsecT']])+'\n')
22152215
f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)','(N/m2)','(N/m2)','(kg/m3)','(m)','(m)']])+'\n')
2216-
for i in range(self.fst_vt['SubDyn']['NBCPropSets']):
2216+
for i in range(self.fst_vt['SubDyn']['NPropSetsCyl']):
22172217
ln = []
22182218
ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['PropSetID1'][i]))
22192219
ln.append('{:^11e}'.format(self.fst_vt['SubDyn']['YoungE1'][i]))
@@ -2223,10 +2223,10 @@ def write_SubDyn(self):
22232223
ln.append('{:^11}'.format(self.fst_vt['SubDyn']['XsecT'][i]))
22242224
f.write(" ".join(ln) + '\n')
22252225
f.write('------------------ RECTANGULAR BEAM CROSS-SECTION PROPERTIES -----------------------------\n')
2226-
f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NBRPropSets'], 'NPropSets', '- Number of structurally unique rectangular cross-sections\n'))
2226+
f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['SubDyn']['NPropSetsRec'], 'NPropSetsRec', '- Number of structurally unique rectangular cross-sections (if 0 the following table is ignored)\n'))
22272227
f.write(" ".join(['{:^11s}'.format(i) for i in ['PropSetID', 'YoungE', 'ShearG', 'MatDens', 'XsecSa', 'XsecSb', 'XsecT']])+'\n')
22282228
f.write(" ".join(['{:^11s}'.format(i) for i in ['(-)','(N/m2)','(N/m2)','(kg/m3)','(m)','(m)','(m)']])+'\n')
2229-
for i in range(self.fst_vt['SubDyn']['NBRPropSets']):
2229+
for i in range(self.fst_vt['SubDyn']['NPropSetsRec']):
22302230
ln = []
22312231
ln.append('{:^11d}'.format(self.fst_vt['SubDyn']['PropSetID2'][i]))
22322232
ln.append('{:^11e}'.format(self.fst_vt['SubDyn']['YoungE2'][i]))

reg_tests/r-test

Submodule r-test updated 75 files

0 commit comments

Comments
 (0)