티스토리 툴바


SY Times (Superyacht Times) 오늘의 머릿기사에 Merle Wood & Associates 에서 7월에 요트를 판매했다는 내용이 떴다.

Merle Wood & Associates has sold the 170ft Benetti Midlandia in July. They also report three new superyacht listings, including the Heesen 4400 One O One and the 164ft Shandor which are both jointly listed with Edmiston.

170ft (51.8m) 급 베네티 미들랜디아를 팔았고, 슈퍼 요트 세 대를 새로 등록했다 한다. 그 중 헤센 4400 원 온 원, 164ft 쉔도어을 자랑하고 싶은 모양이다. 또한 이들은 에드미스톤에도 같이 등록되었다는데, 그렇다면 여기서 우리는 다음과 같은 이름들에 주목하게 된다.

베네티 미들랜디아, 헤센 4400 원 오 원, 쉔도어 ---> 요트 이름
멀 우드 엔 어소시에이츠, 에드미스톤 ---> 요트 판매 회사.

우선 요트 회사들부터 검색해 보면,

http://www.merlewood.com
http://www.edmistoncompany.com

두 사이트의 메뉴가 얼추 비슷한 것으로 보아 요것이 요트 브로커의 표본이라 보면 되지 않을까 싶다.

그리고 본격적으로 오늘의 요트 세 대를 검색해 보자.

Midlandia

 
Yacht name: Midlandia
Length: 170 ft 6 • 52 m
Year: 2001
Builder: Benetti
Design: Stefano Natucci
Owner: Alex Shnaider • Midland Group • Jordan & Midland Formula One boss
Photo date: May 2006
Location: Monaco Grand Prix 2006

빌더가 Benetti 다. 이탈리아 회사인데, 럭셔리해 보이려고 무척 용을 쓴 사이트다.
http://www.benettiyachts.it





베니티 구경하다 건진 사진. 슈퍼요트의 선수형상이 어떤식인지 분명히 알수 있게 해 주는 귀한 사진 둘.
설계자인 슈테파노 나투찌 사진은 당장 찾을 수 없었다.


Heesen 4400 One O One



이게 헤센의 101 즉 원오원.
베네티 미들랜드와 외관상 비슷한데, 60 미터급 슈퍼요트는 저정도 틀에서 크게 벗어나지 못하는 모양이다.

Shandor

Yacht name: Shandor
Formerly: Margaux Rose
Length: 159 ft • 48 m
Year: 1988 - refit: 1994
Builder Schweers
Architect: Gerhard Gigenast

전통 선박형상을 충실히 답습한듯한 외관. 위의 원오원이나 미들랜디아와같은 현대형 형상으로 넘어오는 과도기적 모습이 전해진다.

Posted by 친절한시선



파라메트릭 선형설계의 정수는 뭐니뭐니해도 SAC 설계다. SAC는 선형설계를 여타의 수송기계의 형상설계와 구분지어 주는 핵심 요소다.

파라메트릭 설계 분야에서 타의 추종을 불허하는 걸작 FRIENDSHIP SYSTEMS 의 소프트웨어 FRIENDSHIP-Framework 와 C++ 코드로 따로 작성된 라켄비변환 프로그램 (LASAC.EXE)를 연동하여 주어진 Cp값과 LCB를 만족하는 SAC 곡선을 생성하였다. FRIENDSHIP-Framework 내부에도 FLackenby 타입의 변환 기능이 잘 갖추어져 있으나, 이는 횡단면 정의 Offset 과 함께 작동하는 엔터티이기 때문에 SAC를 단독으로 생성하는데 사용할 수 없다.

본 방법에서 필요로 하는 파라메터의 갯수는 9개에 불과하며 아래와 같이 정의된다.

coeffCp : Prismatic coefficient
coeffCpr : Prismatic coefficient of run
xLCB : X-position of LCB
lenRun : Length of run
lenPar : Length of parallel midbody
ratBulb : Bulb ratio
ratTransom : Transom ratio
tanAtStartOfRun : Tangent at start position of run
tanAtEndOfEnt : Tangent at end position of entrance.

윗 그림에서 검은색 곡선은 lasac.exe 가 아직 적용되지 않은 상태의 최초 추정곡선으로 xLCB 를 제외한 모든 파라메터 값을 만족한다. 빨간색 곡선은 최초 추정곡선의 LCB 와 목적 LCB의 오차를 lasac.exe를 통해 수정하여 도출한 결과값이다.

그림에 사용된 각 파라메터값은 다음과 같다.

coeffCp : 0.7215
coeffCpr : 0.266
xLCB : 0.55
lenRun : 0.38
lenPar : 0.15
ratBulb : 0.1
ratTransom : 0.08
tanAtStartOfRun : 30
tanAtEndOfEnt : 145

파라메트릭 설계의 실제는 이론과 달리, 횡단면 전체 추정으로부터 역으로 SAC를 도출해 낸 후 다시 라켄비 방법을 적용하여 선형변환을 수행할 수 밖에 없었다. 그러나 본 방법을 통해 파라메트릭 선형 설계 이론이 제시하는 연역적 설계 프로세스를 그대로 구현할 수 있게 되었다.

Posted by 친절한시선

많은 이들이 새로운 변화를 원한다.
대한민국은 꾸준히 변해 온 듯 하지만, 사실 지금까지 제대로 변한 것은 없다.

바다가 열릴 때.

변화는 비로소 그 숨통을 트고 활동운화할 것이다.

[조무영~]
Posted by 친절한시선

이름하여 래색(Lasac) 즉, Lackenby for SAC 의 줄임말이다. 기존에 갖고 있던 소스코드가 잘 말을 안들어 이번에 마음억고 확실히 고쳐 놓았다. 물론 이 프로그램은 FRIENDSHIP-Framework 와 연동할 계획으로 작성했다.
string 과 vector 자료구조를 몇 군데에 삽입하였다.

 

무슨 군대 전투모처럼 생긴 이것이 사실은 대충 20 스테이션을 갖는 SAC 다.
검정색 곡선이 주어진 기본 곡선이다.
붉은색은 중앙평행부가 전방으로 확장되고 동시에 Cp 가 줄어 든 경우다.

C++ 을 기본으로, STL 을 조금 섞었다. 
Posted by 친절한시선

Omega Architects

News 2009/07/01 18:33
superyachttimes.com 에 뜬 오메가 아키텍츠에 관련된 기사다.

For most of my clients, the current economic malaise is a worlds away...

Over the last years here at Omega, we have seen the numbers of yachts purchased by European and American buyers gradually eclipsed by orders from clientele in Russia and the Middle East- at this point, that is where our most extravagant orders are coming from...

호화 요트는 부호들의 기호 제품이긴 한데 그 안에는 그러나 나름 건전한 스포츠 정신, 혹은 성실한 부루주아정신의 반영 등이 녹아 있었다. 그런데 지금은 러시아와 중동의 석유갑부들이 요트에 과다하게 돈칠갑을 하고 있는 것이 아닌가 하고 슈퍼요트 타임즈에서 은근히 오메가 아키텍츠 사장 Laupmann 의 의견을 찔러 물었다. 그랬더니 그 대답이 이렇다.

I’ve been working with this sort of design for so long, I don’t even really bat an eyelid at these numbers- however, I am of course very much aware that the world in which we work is increasingly in very sharp contrast to the current situation regarding the world economy.

누가 그걸 몰라서 묻나?

그러나 난 라우만의 심정을 이해할 수 있다. 자기는 요트회사 디자이너이자 사장이고, 그 책임자로서 그의 고객들의 자본주의적 진정성까지 가타부타 평가 할 순 없는 것이다.


Picture from http://www.superyachttimes.com



이번에 아주 잘 빠진 60m 급 오메가 요트다. 65m가 스탠다드라 그랬는데, 왜 5미터 줄였는지 모르겠다.
그리고 오메가 아키텍츠는 지금 세계 요트 시장의 추세인 대양항해용 100+ 급 대형요트 설계에 돌입했다 한다. 그런데, 그 배를 지어 올릴 조선소가 없단다. 




 
Posted by 친절한시선
사용자 삽입 이미지

제목이 주입견곡면이란다. ㅋㅋ.
주입부란 Entrancepart 를 말하고 견부는 어깨부 Shoulder 를 일컫는다.
주욱 늘어 쓰면 The surface from the beginning of the entrance to the shoulder. 즉 엔트런스 시작부에서 선수어깨까지의 곡면이다.

FRIENDSHIP-Framework 이 2.0 으로 버전업 되면서 Feauture 안에서 다른 Feature 를 호출(사실은 코드 복사)할 수 있는 기능이 추가되었다. 이른바 Feature nesting 기법이다.

신기술을 적용하야!

아래와 같이 곡면이 하나씩 추가 되고 있다.

 
Posted by 친절한시선
사용자 삽입 이미지
FRIENDSHIP-Framework 에 내장된 사용자 프로그래밍 기능인 Feature 도구를 사용해 빌지를 포함하는 선체 횡단면 생성기를 정의하였다.

사용자 삽입 이미지

featConvexSection 은 이름에서 보는 바와 같이 정의되는 직선과 곡선이 모두 Convexity 를 만족한다.
이왕이면 면적이나 도심까지 만족하는 상태에서 횡단면이 형성되면 좋겠으나, 실제 적용에 있어서 매 설계 횡단면 마다 적용하는데 실제적으로 무리가 있다.

Flare 나 Deadrise 가 없는 현대식 선박 뿐만아니라, 두 파라메터에 값이 주어진 경우에도 성립하며 용골의 넓이도 적용시킬 수 있으니 featConvexSection 은 중앙평행부와 선수, 선미 어깨 사이의 볼록곡면을 정의하는데 사용된다. 아래에서, Deadrise, Flare 그리고 용골판의 거리를 모두 포함한 횡단면 곡선을  소개한다.


사용자 삽입 이미지




Posted by 친절한시선



오늘의 두 번째 벌브 템플릿.
Feature, Curve Engine 그리고 Meta Surface 이 셋이 조화를 이뤄 기본적 형상을 갖춘다.


Posted by 친절한시선



저번에도 한 번 만들었다가 그다지 일반적이지 않았다 재사용 하지 못했던 선수벌브 프레임을 이번에 다시 만들었다.

주요 외부 입력 파라메터로서는,

FP에서의 벌브 면적. 벌브 길이. 벌브 끝 위치 등과 같은 것들이다.

Posted by 친절한시선

실린더 잠수체 영향에 의한 이상유체 자유수면 유동의 결론.

조파저항과 조파저항 계수를 구해보자.

 

조파저항

f1 = Interal_s [Pi * N1,i] ds : similar to Sigma_i(1)_to_NB [Pi*N1,i*Si] 

f1 = X 방향 Hydrodynamic force.

Pi = 물체의 i 번째 패널에 작용하는 압력

N1,i = 물체의 i 번째 패널의 법선벡터 x 방향 성분

NB = 총 패널 수

Si = 패널 면적. 여기서는 패널의 길이.

 

조파저항 계수

Cw =  -f1 / (Rho/2 (V^2 * S))

S = 전체 침수 표면적

Rho = 해수 온도 15도씨에서의 해수밀도

 

지름 5m 의 무한 길이의 실린더가 자유수면 아래에 수평하게 잠겨 있는 2차원 문제에서,

유속 4-5 m/s 에서의 조파저항계수 변화는 아래 표와 같다.

 [Cw 값 * E-03]

 

이 중 유속 4m/s 에 대한 압력분포는 아래 그림과 같다.

 

%%%

여기까지다.

원형 실린더가 아닌 익형을 도입한다거나, 혹은 복수개의 형상을 취급하는 등의 응용 작업을 얼른 추가하고 싶으나,

2차원 문제는 3차원 문제에 적용하기 이전에 그 방법론 자체를 한 번 적용해 본다는 차원에서 만족하고 여기서 !!!

 

 

%%%

이른바 Main Oriented Programing 의 어정쩡한 프로세스.

#include<stdlib.h>

#include "TryMath.h"

#include "TryGeometry.h"

#include "ChildrenOfCTryGeometry.h"

void main()

{

    int i,j,k ; //필요할 때 마다 쓰일 이터레이션 변수


    CCommand comm ;

    comm.readCommand("command") ; //다각형 파일 이름들을 저장하고 있는 파일

    

    //Polyline

    C2DPolyLineGroup pol ;

    pol.set2DPolyLineGroup() ;

    pol.drawPolygon("may_polyline_circle.plt",gPolyLineGroup.at(0).Positions) ;

    pol.drawPolygon("may_polyline_image.plt",gPolyLineGroup.at(1).Positions) ;

    pol.drawPolygon("may_polyline_freesurface.plt", gPolyLineGroup.at(2).Positions) ;

    //여기서 gPolyLineGroup 정의.

    

    //Local Base

    C2DLocalBaseGroup lbase ;

    lbase.set2DLocalBaseGroup() ;

    //여기서 gPolyLocalBaseGroup 정의

    //Collocation

    C2DCollocationGroup cgroup ;

    cgroup.set2DCollocationGroup() ;

    cgroup.drawPolygon("may_collocation_circle.plt",gPolyCollocationGroup.at(0).Collocations) ;

    cgroup.drawPolygon("may_collocation_image.plt",gPolyCollocationGroup.at(1).Collocations) ;

    cgroup.drawPolygon("may_collocation_freesurface.plt",gPolyCollocationGroup.at(2).Collocations) ;
 

// 여기서 gPolyCollocationGroup 정의


 

    //Source position

    C2DSourcePositionGroup qgroup ;

    qgroup.set2DSourcePositionGroup() ;

    qgroup.drawPolygon("may_source_circle.plt",gPolySourcePositionGroup.at(0).SourcePositions) ;

    qgroup.drawPolygon("may_source_image.plt",gPolySourcePositionGroup.at(1).SourcePositions) ;

    qgroup.drawPolygon("may_source_freesurface.plt",gPolySourcePositionGroup.at(2).SourcePositions) ;

 // 여기서 gPolySourcePositionGroup 정의

    //Wave Elevation

    C2DWaveElevation wave ;

    wave.setStaggeredGrid() ; // generates the extra collocation and source point.

    wave.setNumbers() ; // sets the new numbers of collocations on the hulls and free surfaces.

    

    //SOLUTION

    double VelX = 8. ;

    wave.iterateWaveElevation(1, 0.000001, VelX) ;    

            //여기서 gSigmaGroup : vector<vector<double> >

            //여기서 gWaveElevationGroup : vector<vector<aPosition> >

    wave.drawPolygon("wave_elevation1.plt",gWaveElevationGroup.at(0)) ;

    

    //Velocity Field

    int nRow ;

    int nCol ;

    vector<aFieldVector> VelField ;

 

    C2DFieldControl fcon ;

    int NoGridDown = 60 ;

    double zStep = -0.5 ;

    fcon.createVelocityField(VelX, NoGridDown, zStep, nRow, nCol, VelField) ;

            //여기서 nRow, nCol, VelField

    wave.drawVectorField("vf_3.plt",nRow,nCol,VelField) ;

 

    //Pressure Field

    aFieldScalar aPress ;

    vector<aFieldScalar> PressureField ;

    PressureField.clear() ;

    for(i=0 ; i<VelField.size() ; i++)

    {

        aPress.Pos.x = VelField.at(i).Pos.x ;

        aPress.Pos.y = VelField.at(i).Pos.y ;

        aPress.Pos.z = VelField.at(i).Pos.z ;

        

        if(VelField.at(i).Vx==0.0)

            aPress.Value = 0.0 ;

        else

            aPress.Value = 0.5*RHO_DENSITY_15_DEGREE*( pow(VelX,2.) - pow( (VelField.at(i).Vx+VelField.at(i).Vz), 2.)) ;

        

        PressureField.push_back(aPress) ;

    }

    wave.drawScalarField("pre_3.plt",nRow,nCol,PressureField) ;    

     //여기서 압력장 PressureField

    //Wave Resistance

    double WaveResistance = 0.0 ;

    double Coeff_Cw ;

    double WettedArea ;

    double TotalWettedArea = 0.0 ;

    double NormalX ;

    aPosition aBodyVel ;

    double density = RHO_DENSITY_15_DEGREE ;

    aFieldScalar aPressure ;

    vector<aFieldScalar> aPressureGroup ;

    aPressureGroup.clear() ;

    vector<vector<aFieldScalar> > PolyPressureGroup ;

    PolyPressureGroup.clear() ;

 

    int NoUnderBody = 0 ; //all numbers of the bodies in the water.

    for(i=0 ; i<gConditionNumberGroup.size() ; i++)

    {

        if(gConditionNumberGroup.at(i)==0)

            NoUnderBody++ ;

    }

    for(i=0 ; i<NoUnderBody ; i++)

    {

        for(j=0 ; j<gPolyCollocationGroup.at(i*2).Collocations.size() ; j++) //iterates by Body Collocation Group

        {

            //Position

            aPressure.Pos.x = gPolyCollocationGroup.at(i).Collocations.at(j).x ;

            aPressure.Pos.y = gPolyCollocationGroup.at(i).Collocations.at(j).y ;

            aPressure.Pos.z = gPolyCollocationGroup.at(i).Collocations.at(j).z ;

            //Veloctity

            wave.getVelocity(VelX,aPressure.Pos,aBodyVel) ;

            //Pressure

            aPressure.Value = 0.5*density*(pow(VelX,2.)-pow((aBodyVel.x+aBodyVel.z),2.)) ;

            //Wetted Area

            WettedArea = gPolyLocalBaseGroup.at(i*2).LocalBases.at(j).length ;

            //Total Wetted Area

            TotalWettedArea += WettedArea ;

            //Normal x direction

            NormalX = gPolyLocalBaseGroup.at(i*2).LocalBases.at(j).n.x ;

            //Total Actual hydrodynamic force

            WaveResistance += aPressure.Value*NormalX*WettedArea ;

                

            //Contain

            aPressureGroup.push_back(aPressure) ;

        }

        //Contain

        PolyPressureGroup.push_back(aPressureGroup) ;

    }

    //wave resistance

    cout<<"Wave Resistance "<<WaveResistance<<endl;

    //wave resistance coefficient

    Coeff_Cw = -WaveResistance/(0.5*density*pow(VelX,2.)*TotalWettedArea) ;

    cout<<Coeff_Cw<<endl;


// 여기서 조파저항과 조파저항계수.


}//MAIN
 


 

위에서 표시된 광역변수를 포함하여 이 프로그램이 사용하는 광역변수는 다음과 같다.

gConditionNumberGroup 경계조건 식별
gFileNameGroup 파일 이름 저장
gPolyCollocationGroup 소스포인트에 대한 조종점(Collocation)
gPolyLineGroup 다각형 자료구조 (실린더, 실린더 이미지, 자유수면)
gPolyLocalBaseGroup  각 다각형의 국부좌표 방향벡터
gPolySourcePositionGroup 소스포지션 (Desingularized Source Position)
gSigmaGroup 소스강도
gWaveElevationGroup  파고.

 

 

 

 

 

 

 

 

 

Posted by 친절한시선